Bonjour !
Je souhaite récupérer des données d'un fichier d'entrée (*.dat, du texte). Cette démarche est identique aux outils Properties de Java. Néanmoins le fichier d'entrée n'est pas de la forme key=value, mais plutôt :
J'ai d'abord orienté ma recherche sur la FAQ du site où j'ai découvert l'objet Scanner :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 c Key Value Key2 Value2 etc...
Envoyé par Comment lire un fichier ligne par ligne ?
auteurs : sironimo, Baptiste Wicht
De mon coté je ne souhaite pas l'afficher mais extraire les value de certains couples (key,value).
La méthode que j'utilise se résume ainsi :
1 - Initialisation des données :
- Paramètre => File
- String des key recherchées
- Scanner et Matcher
2 - Parcourir le fichier texte avec la méthode Scanner.hasNextLine()
- Si la ligne courante correspond à une des key (sous forme Pattern),
ça veut dire que la donnée est à la ligne suivante (cf. début du post)
donc je stock cette ligne.
- Sinon je teste si ça correspond à une autre des key recherchées.
3 - Traitement supposé terminé, je scanner.close() et affiche les données stockées.
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 public class GetDatas { public static Pattern pLine, searchName, searchLongi, searchIniDate, searchS, searchCP, searchDM, searchEM, searchXM; public static Matcher m; public static String newSN, newLN, newDN, newS, newCPN, newDMN, newEMN, newXMN; public static void writeProps(String pathDat) throws IOException { File srcFile = new File(pathDat); Scanner scanner = new Scanner(srcFile); String satName = "c Satellite Name"; String longiName = "c Satellite Longitude Positioning (in °E)"; String dateName = "c Initial Simulation Date (Year, Month, Day)"; String sName = "c Satellite cross sectional area (in m2)"; int nbLigne=0; while(scanner.hasNextLine()) { String line = scanner.nextLine(); nbLigne++; pLine = Pattern.compile(line); if(pLine.matcher(satName).matches()) { newSN = scanner.nextLine(); System.out.println("Nom récupéré à la "+nbLigne+"-ème ligne"); } else { if(pLine.matcher(longiName).matches()) { newLN = scanner.nextLine(); System.out.println("Longitude récupérée à la "+nbLigne+"-ème ligne"); } else { if(pLine.matcher(dateName).matches()) { newDN = scanner.nextLine(); System.out.println("Date de simulation récupérée à la "+nbLigne+"-ème ligne"); } else { if(pLine.matcher(sName).matches()) { newS = scanner.nextLine(); System.out.println("Section m² récupérée à la "+nbLigne+"-ème ligne"); } } } } } scanner.close(); System.out.println("Nb Lignes : "+nbLigne+"\nNom : "+newSN+"\n"+"Longitude en °Est : "+newLN+"\n"+"Date initiale : "+newDN); }
Mon fichier d'entrée est celui ci :
Mais mon résultat (affiché ds la console) pose problème :c Restart Filename
c Autonomy Filename
c Thruster Filename
NILE101.th
c Orbit Determination Filename
NILE101.do
c Strategy Filename
NILE101.st2
c Satellite Name
NILE101
c Satellite Longitude Positioning (in °E)
35
c Initial Simulation Date (Year, Month, Day)
2010 06 15
c Satellite cross sectional area (in m2)
50.12
Je ne récupère que le nom et pas les autres paramètres alors que les Pattern et les key du fichiers sont censés matcher. Quelqu'un aurait une idée ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Nom récupéré à la 9-ème ligne Nb Lignes : 23 Nom : NILE101 Longitude en °Est : null Date initiale : null
Je suis également à l'écoute de différentes approches si vous en avez !
Merci par avance.
Partager