IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Remplacement variables à l'ouverture fichier .txt à partir d'un hashtable


Sujet :

Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 64
    Points : 78
    Points
    78
    Par défaut Remplacement variables à l'ouverture fichier .txt à partir d'un hashtable
    Bonjour,
    je suis bloqué depuis près d'une semaine sur ce problème, le voici :

    en fait j'aimerais a partie d'un fichier texte tel que celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    nom : Test 
     
    prenom : Test2
     
    adr1 : 1 rue de bordeaux
     
    adr2 : 2 rue de paris
     
    ville : Paris
     
    code postale : 75000
    pouvoir au chargement de ce fichier, pouvoir remplacer ces valeurs par celles contenu dans le hastable.

    Je suis un peu bloqué, voici mon code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.text.*;
    import javax.swing.text.html.*;
    import javax.swing.text.EditorKit;
    import java.awt.*;
    import java.awt.event.*;
    import java.net.*;
    import java.util.*;
    import java.io.*;
     
    public class DocumentViewer extends JFrame implements HyperlinkListener, ActionListener {
     
    	JEditorPane viewer      = new JEditorPane ();
    	JTextField urlTextField	= new JTextField ();
    	private JMenuBar menuBar= new JMenuBar();
    	private JMenu menu1 	= new JMenu("- Fichier -");
    	private JMenuItem item1 = new JMenuItem("Ouvrir...");
    	private JMenuItem item2 = new JMenuItem("Fermer");
     
    	Hashtable htData = new Hashtable();
     
    	public DocumentViewer () {	
    		// Construction de l'Interface Graphique
    		// Panel en haut avec un label et le champ de saisie
    		JPanel inputPanel = new JPanel (new BorderLayout ());
    		JLabel label1 = new JLabel ("URL : ");    
    		inputPanel.add (label1, BorderLayout.WEST);
    		JButton LoadHash = new JButton ("    Load Hashtable    ");    
    		inputPanel.add (LoadHash, BorderLayout.EAST);
    		inputPanel.add (urlTextField, BorderLayout.CENTER);
    		// Zone scrollée au centre avec le document    
    		JScrollPane scrollPane = new JScrollPane (viewer);
    		// Ajout des composants à la fenêtre
    		getContentPane ().add (inputPanel, BorderLayout.NORTH);
    		getContentPane ().add (scrollPane, BorderLayout.CENTER);
     
    		// Bar de menu
    		item1.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent arg0) {
    				JFileChooser chooser = new JFileChooser();
    				int returnVal = chooser.showOpenDialog(getParent());
    				if(returnVal == JFileChooser.APPROVE_OPTION) {
    					System.out.println(" Fichier choisi : " +chooser.getSelectedFile().getName());
    					try {
    						viewer.read(new FileReader(new File(chooser.getSelectedFile(), getTitle())), null);
    					} catch (FileNotFoundException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					} catch (IOException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					}
    				}
    			}
    		});
     
    		item2.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent arg0) {
    				System.exit(0);}
    		});
     
    		LoadHash.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent arg0) {
    				loadPage2(htData);}
    		});
     
    		this.menu1.add(item1);
    		this.menu1.add(item2);
    		this.menuBar.add(menu1);		
    		this.setJMenuBar(menuBar);
    		this.setVisible(true);
     
    		EditorKit htmlKit = viewer.getEditorKitForContentType("text/html");
    		viewer.setEditorKit(htmlKit);
    		viewer.setEditable (true);
    		// Ajout du listener de modification de la saisie
    		urlTextField.addActionListener (this);
     
    	}
     
    	// Méthode appelée après un clic sur un lien hypertexte
    	public void hyperlinkUpdate (HyperlinkEvent event) {
    		if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
    			urlTextField.setText(event.getURL().toString());
    			if (event instanceof HTMLFrameHyperlinkEvent) {
    				HTMLDocument doc = (HTMLDocument)viewer.getDocument ();
    				doc.processHTMLFrameHyperlinkEvent ((HTMLFrameHyperlinkEvent)event);
    			} else {
    				loadPage (urlTextField.getText ());
    			}
    		}
    	}
     
    	// Méthode appelée après une modification de la saisie
    	public void actionPerformed (ActionEvent event) {
    		loadPage (urlTextField.getText ());
    	}
     
    	public void loadPage (String urlText) {
     
    		// String recup = viewer.getText();
    		// System.out.println(recup);
    		viewer.setText("Fichier non trouvé !");
    		// System.out.println(recup);
     
    		try {
    			viewer.read(new FileReader(new File(urlText)), null);
    		} catch (FileNotFoundException e){
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
     
    	public void loadPage2(Hashtable htData){
     
    		htData.put("@nom","Akuma");
    		htData.put("@prenom","Abel");
    		htData.put("@adr1","1 rue rossini");
    		htData.put("@adr2","2 rue rossini");
    		htData.put("@ville", "nice");
    		htData.put("@c_postal","0600");
     
    		/*
    		Enumeration e = htData.elements();
    		while(e.hasMoreElements()){
    		System.out.println(e.nextElement());}
    		 */
     
    		String stringNom = "Nom = " + htData.get("@nom")+ "; " ;
    		String stringPrenom = "Prenom = " + htData.get("@prenom")+ "; " ;
    		String stringAdr1 = "Adresse1 = " + htData.get("@adr1")+ "; " ;
    		String stringAdr2 = "Adresse2 = " + htData.get("@adr2")+ "; " ;
    		String stringComm = "Ville = " + htData.get("@ville")+ "; ";
    		String stringFin = "Code postal = " + htData.get("@c_postal") + "; ";
     
    		String stringTout = stringNom+ stringPrenom + stringAdr1 + stringAdr2 + stringComm + stringFin;
     
     
    		/*
    		System.out.println("Keyset : "+htData.keySet());
    		System.out.println("Keyset Values : "+htData.values());
    		 */
     
    		InputStream in = new ByteArrayInputStream(stringTout.getBytes()); 
    		try {
    			viewer.read(in, null);
    		} catch (IOException e1) {
    			// TODO Auto-generated catch block
    			e1.printStackTrace();}
    	}
     
     
    	// Méthode main () d'exemple de mise en oeuvre.
    	// Utilisation : java DocumentViewer
    	public static void main (String [] args) {
    		JFrame viewerFrame = new DocumentViewer ();
    		viewerFrame.setSize (450, 350);
    		viewerFrame.show ();
    	}
    }

    Merci à ceux qui tenteront de m'aider = )

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Ton explication n'est pas claire du tout.
    Tu veux modifier le contenu du fichier texte ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 64
    Points : 78
    Points
    78
    Par défaut
    Oui c'est exactement ça, je veux pouvoir au chargement du fichier texte changer les valeurs des variables par celles du hashtable mais je ne sais pas trop comment faire et je connais pas toutes les fonctions de l'API.

    Merci

  4. #4
    Membre chevronné
    Profil pro
    Développeur Java Indépendant
    Inscrit en
    Mai 2007
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java Indépendant

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 333
    Points : 2 061
    Points
    2 061
    Par défaut
    Bonjour ceinoxe,

    Un problème similaire a déjà été résolu ici :
    http://www.developpez.net/forums/d78...fichier-texte/

    En résumé, tu remplace les valeurs qui changent par des balises, que tu remplace au moment du chargement grâce à des expressions régulières.

    Les sources du résultat ont été posté sur le topic je pense qu'elles t'aideront .

    Bon courage
    Yoshi

    PS : tous les propos tenus dans le message ci-dessus sont à préfixer avec "A mon humble avis", "Je pense que". Il serait inutilement fastidieux de le rappeler à chaque phrase.

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Un BufferedWriter fera l'affaire.
    Mais puisque tu ne connais pas l'API, un saut du côté du package java.io te fera le plus grand bien

    EDIT : trop lent
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 64
    Points : 78
    Points
    78
    Par défaut
    @Herve-Loiret : Merci je vais regarder ca attentivement demain ;
    -> T'es toujours au taquet Des fois je veux aider des personnes et toi tu es passé avant à chaque fois !

    Edit : La preuve encore

    Merci beaucoup à vous deux , je vous tiens au courant

  7. #7
    Membre chevronné
    Profil pro
    Développeur Java Indépendant
    Inscrit en
    Mai 2007
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java Indépendant

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 333
    Points : 2 061
    Points
    2 061
    Par défaut
    Ahaha, je rôde, je rôde .

    Je suis en stage c'est un avantage aussi. Hésites pas à nous tenir au courant .
    Yoshi

    PS : tous les propos tenus dans le message ci-dessus sont à préfixer avec "A mon humble avis", "Je pense que". Il serait inutilement fastidieux de le rappeler à chaque phrase.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 64
    Points : 78
    Points
    78
    Par défaut
    J'ai un peu regardé mais comment faire le remplacement sans toucher au fichier texte ( c'est-à-dire sans insérer les balises) avant?

  9. #9
    Membre chevronné
    Profil pro
    Développeur Java Indépendant
    Inscrit en
    Mai 2007
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java Indépendant

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 333
    Points : 2 061
    Points
    2 061
    Par défaut
    Je ne sais pas si c'est ce que tu veux dire, mais je serais toi je créerais une méthode "openFile(Hashtable hs)" qui se charge d'ouvrir le fichier, remplacer les balise par les valeurs de la hashtable, et de te retourner une copie du fichier.

    Ça répond à ta question ?
    Yoshi

    PS : tous les propos tenus dans le message ci-dessus sont à préfixer avec "A mon humble avis", "Je pense que". Il serait inutilement fastidieux de le rappeler à chaque phrase.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 64
    Points : 78
    Points
    78
    Par défaut
    J'ai finalement insérer les balises dans le fichier texte pour ne pas compliquer !

    et la ça marche nickel !

    J'ai mis les balise <*nom*> <*prenom*> etc... dans mon fichier texte et avec un Stringbuffer et une énumération (ci-joint) ça fonctionne très bien :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    contenuTxt=Content.toString();
    			Enumeration enu=Customization.keys();
    			while(enu.hasMoreElements()){
    				String Cle=enu.nextElement().toString();
    				contenuTxt=contenuTxt.replaceAll(Cle, Customization.get(Cle));

Discussions similaires

  1. [Batch] Remplacer champ dans un fichier txt à partir de variable d'entrée
    Par ThomasParis dans le forum Scripts/Batch
    Réponses: 14
    Dernier message: 26/09/2010, 16h47
  2. Réponses: 3
    Dernier message: 12/04/2006, 12h55
  3. [FLASH MX] Variables depuis un fichier txt
    Par mascagne dans le forum Flash
    Réponses: 4
    Dernier message: 01/03/2006, 17h57
  4. Réponses: 5
    Dernier message: 21/10/2005, 11h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo