Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

parser un fichier texte

2 réponses
Avatar
olivier-d.kieffer
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:

nom\tpr=E9nom\tsoci=E9t=E9\tfonction\tdate\r
MAS\tS=E9bastien\tLivinfo\tDirecteur Commercial\t26\01\2007

\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");


}
}

2 réponses

Avatar
Sylvain
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:

nomtprénomtsociététfonctiontdater
MAStSébastientLivinfotDirecteur Commercialt2612007

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.

Avatar
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:

nomtprénomtsociététfonctiontdater
MAStSébastientLivinfotDirecteur Commercialt2612007

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é ?

http://java.sun.com/javase/6/docs/api/java/util/Scanner.html

A+
TM