Bon je laisse tomber l'=E9tape d'ouverture et d'affichage des lignes du
fichier texte car je n'y arrive pas. Il faut que je passe =E0 l'=E9tape
du parsing.
Dans mon fichier text il y a 2 lignes. Elles sont compos=E9s comme sa:
\t pour une tabulation et \r pour le retour chariot.
Pouvez me dire ce que je dois rajouter =E0 mon code existant pour
pouvoir parser ces 2 lignes. Car le but de la manip c'est de pouvoir
afficher dans un programme existant les informations pr=E9c=E9dantes. La
premi=E8re ligne correspond =E0 des champs et la deuxi=E8me =E0 leur
valeur.
Voil=E0. Svp j'ai vraiment besoin d'aide car j'y arrive pas la. Je vous
redonne mon code pr=E9c=E9dent si vous pouvez m'aider.
package exemple;
import java.io.*;
publicclass Test {
public Test(){
super();
}
public void findFiles(String directoryPath){
File directory =3D new File(directoryPath);
File moreRecentFile =3D null;
// verification des parametres
if(!directory.exists()){
System.out.println("Le fichier/r=E9pertoire '"+directoryPath+"' n'existe
pas");
return;
}
if(!directory.isDirectory()){
System.out.println("Le chemin '"+directoryPath+"' correspond =E0 un
fichier et non =E0 un r=E9pertoire");
return;
}
// liste des fichiers "*.txt"
File[] files =3D directory.listFiles(
new FilenameFilter(){
publicboolean accept(File dir, String name){
return name.toLowerCase().endsWith(".txt");
}
}
);
// cas alternatif: pas de fichiers "*.txt"
if(files.length=3D=3D0){
System.out.println("Pas de fichier texte");
return;
}
// cas general: parcours et memorise le plus recent fichier
moreRecentFile=3Dfiles[0];
for(File f:files){
if(f.lastModified()>moreRecentFile.lastModified())
moreRecentFile =3D f;
}
System.out.println("Le fichier le plus r=E9cent du r=E9pertoire
"+directoryPath +" est "+moreRecentFile.getName());
}
publicstaticvoid main(String[] args){
Test finder =3D new Test();
finder.findFiles("C:/temp");
t pour une tabulation et r pour le retour chariot.
Pouvez me dire ce que je dois rajouter à mon code existant pour pouvoir parser ces 2 lignes. [...] La première ligne correspond à des champs et la deuxième à leur valeur.
avant de parser le contenu du fichier texte, il faut le lire! le plus simple est d'utiliser un java.io.LineNumberReader, soit:
try { // open file stream Reader stream = new FileReader(pathname); // connect to line reader LineNumberReader reader = new LineNumberReader(stream); } catch (FileNotFoundException fnf){ }
maintenant on peux lire, soit bille-en-tête 2 lignes (est-ce vraiment toujours le cas) soit un nombre variable de lignes (éventuellement en cherchant à vérifier que la première est une liste de champs nommés):
// read all lines from file Vector<String> lines = new Vector<String>(); for (;;){ try { String line = reader.readLine(); if (line == null) break; lines.add(line); } catch (IOException err){ break; } }
if (lines.size() < 2) return ERROR;
le parsing des lignes relues, StringTokenizer est fait pour cela:
StringTokenizer fields = new StringTokenizer(lines.get(0), "t", false); StringTokenizer values = new StringTokenizer(lines.get(1), "t", false);
enumeration des items:
for (; fields.hasMoreElements(); ){ String field = fields.nextToken(); String value = values.nextToken(); System.out.println(field + ":t" + value); }
évidemment tu auras surement envie de stocker les records relus dans une classe idoine (une class Personne avec nom, prof, etc), une telle classe pourra par exemple disposer d'un constructeur recevant un LineTokeniser.
Sylvain.
olivier-d.kieffer@laposte.net wrote on 25/01/2007 16:38:
Bon je laisse tomber l'étape d'ouverture et d'affichage des lignes du
fichier texte car je n'y arrive pas. Il faut que je passe à l'étape
du parsing.
Dans mon fichier text il y a 2 lignes. Elles sont composés comme sa:
t pour une tabulation et r pour le retour chariot.
Pouvez me dire ce que je dois rajouter à mon code existant pour
pouvoir parser ces 2 lignes. [...]
La première ligne correspond à des champs et la deuxième à leur
valeur.
avant de parser le contenu du fichier texte, il faut le lire!
le plus simple est d'utiliser un java.io.LineNumberReader, soit:
try {
// open file stream
Reader stream = new FileReader(pathname);
// connect to line reader
LineNumberReader reader = new LineNumberReader(stream);
}
catch (FileNotFoundException fnf){
}
maintenant on peux lire, soit bille-en-tête 2 lignes (est-ce vraiment
toujours le cas) soit un nombre variable de lignes (éventuellement en
cherchant à vérifier que la première est une liste de champs nommés):
// read all lines from file
Vector<String> lines = new Vector<String>();
for (;;){
try {
String line = reader.readLine();
if (line == null)
break;
lines.add(line);
}
catch (IOException err){
break;
}
}
if (lines.size() < 2)
return ERROR;
le parsing des lignes relues, StringTokenizer est fait pour cela:
StringTokenizer fields = new StringTokenizer(lines.get(0), "t", false);
StringTokenizer values = new StringTokenizer(lines.get(1), "t", false);
enumeration des items:
for (; fields.hasMoreElements(); ){
String field = fields.nextToken();
String value = values.nextToken();
System.out.println(field + ":t" + value);
}
évidemment tu auras surement envie de stocker les records relus dans une
classe idoine (une class Personne avec nom, prof, etc), une telle classe
pourra par exemple disposer d'un constructeur recevant un LineTokeniser.
t pour une tabulation et r pour le retour chariot.
Pouvez me dire ce que je dois rajouter à mon code existant pour pouvoir parser ces 2 lignes. [...] La première ligne correspond à des champs et la deuxième à leur valeur.
avant de parser le contenu du fichier texte, il faut le lire! le plus simple est d'utiliser un java.io.LineNumberReader, soit:
try { // open file stream Reader stream = new FileReader(pathname); // connect to line reader LineNumberReader reader = new LineNumberReader(stream); } catch (FileNotFoundException fnf){ }
maintenant on peux lire, soit bille-en-tête 2 lignes (est-ce vraiment toujours le cas) soit un nombre variable de lignes (éventuellement en cherchant à vérifier que la première est une liste de champs nommés):
// read all lines from file Vector<String> lines = new Vector<String>(); for (;;){ try { String line = reader.readLine(); if (line == null) break; lines.add(line); } catch (IOException err){ break; } }
if (lines.size() < 2) return ERROR;
le parsing des lignes relues, StringTokenizer est fait pour cela:
StringTokenizer fields = new StringTokenizer(lines.get(0), "t", false); StringTokenizer values = new StringTokenizer(lines.get(1), "t", false);
enumeration des items:
for (; fields.hasMoreElements(); ){ String field = fields.nextToken(); String value = values.nextToken(); System.out.println(field + ":t" + value); }
évidemment tu auras surement envie de stocker les records relus dans une classe idoine (une class Personne avec nom, prof, etc), une telle classe pourra par exemple disposer d'un constructeur recevant un LineTokeniser.
Sylvain.
TestMan
Bon je laisse tomber l'étape d'ouverture et d'affichage des lignes du fichier texte car je n'y arrive pas. Il faut que je passe à l'étape du parsing.
Dans mon fichier text il y a 2 lignes. Elles sont composés comme sa:
t pour une tabulation et r pour le retour chariot.
Pouvez me dire ce que je dois rajouter à mon code existant pour pouvoir parser ces 2 lignes. Car le but de la manip c'est de pouvoir afficher dans un programme existant les informations précédantes. La première ligne correspond à des champs et la deuxième à leur valeur.
Voilà. Svp j'ai vraiment besoin d'aide car j'y arrive pas la. Je vous redonne mon code précédent si vous pouvez m'aider.
Bonjour,
Et une expression réguliere qui récupère les parties dans le type "qui va bien", as-tu essayé ?
t pour une tabulation et r pour le retour chariot.
Pouvez me dire ce que je dois rajouter à mon code existant pour
pouvoir parser ces 2 lignes. Car le but de la manip c'est de pouvoir
afficher dans un programme existant les informations précédantes. La
première ligne correspond à des champs et la deuxième à leur
valeur.
Voilà. Svp j'ai vraiment besoin d'aide car j'y arrive pas la. Je vous
redonne mon code précédent si vous pouvez m'aider.
Bonjour,
Et une expression réguliere qui récupère les parties dans le type "qui
va bien", as-tu essayé ?
t pour une tabulation et r pour le retour chariot.
Pouvez me dire ce que je dois rajouter à mon code existant pour pouvoir parser ces 2 lignes. Car le but de la manip c'est de pouvoir afficher dans un programme existant les informations précédantes. La première ligne correspond à des champs et la deuxième à leur valeur.
Voilà. Svp j'ai vraiment besoin d'aide car j'y arrive pas la. Je vous redonne mon code précédent si vous pouvez m'aider.
Bonjour,
Et une expression réguliere qui récupère les parties dans le type "qui va bien", as-tu essayé ?