bonjour à tous,
Je suis actuellement amené à travailler sur une pseudo base de donnée qui se trouve être au format .txt ! hors les données n'y sont organisés que grossièrement et le nombre d'espaces entre les différents champs d'une même ligne est variable !
Je cherche donc à "spliter" mes lignes de sorte à ce que quelque soit le nombre d'espaces entre deux champs java sache passer au dessus et ne prendre que les informations qui m'intéressent sans butter sur chacun des espaces présents dans la ligne en cour de traitement.
Pour le moment je réalise les actions suivantes :
- Je charge le fichier dans la mémoire en le stockant ligne par ligne dans une liste.
- Je passe la liste récupérée dans une fonctions qui à pour but de réalisé les actions décrites plus haut et renvoyé une nouvelle liste.
Voici mon code si cela peut vous aider !
Main.java
FileParser.java
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 import java.util.List; import fr.faurecia.files.FileParser; import fr.faurecia.utils.ParserUtils; public class Main { public static void main(String[] args) { FileParser parser = new FileParser(); parser.openFile("source.txt"); List<String> buffer = parser.getBuffer(); List<String> fields = ParserUtils.getFields(buffer); for(String s : fields){ System.out.println(); } parser.cleanUp(); } }
et ParserUtils.java
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 import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; import java.util.List; public class FileParser { String lastFilePath = null; List<String> buffer = new ArrayList<String>();; public void openFile(String filePath){ this.lastFilePath = filePath; try { FileReader file = new FileReader(filePath); BufferedReader reader = new BufferedReader(file); String line = null; while((line = reader.readLine()) != null){ this.buffer.add(line); } file.close(); reader.close(); } catch (Exception e) { e.printStackTrace(); } } public void cleanUp(){ this.buffer.clear(); } public List<String> getBuffer(){ return this.buffer; } public String getLastFilePath(){ return this.lastFilePath; } }
Le nom des package n'est pas présent mais c'est normal je ne veux pas me faire taper dessus par mon patron ^^ !
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 import java.util.ArrayList; import java.util.List; public class ParserUtils { public static List<String> getFields(List<String> rawLines){ List<String> allFields = new ArrayList<String>(); for(String line : rawLines){ String[] fields = line.split(" "); for(String field : fields){ allFields.add(field); } } return allFields; } }
Ce code à pour résultat une longue liste de ligne vide !
En vous remerciant d'avance pour vos réponses !
Edit :
J'ai trouvé un bout de la solution en continuant à chercher un peu à droite et à gauche !
J'ai donc trouvé que la méthode split utilisait des expressions régulière, ce qui signifie que la ligne suivante n'aurai jamais fonctionnée :
ParserUtils.java ligne 14
Je l'ai donc remplacé par l'expression qui allais bien, ce qui donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 String[] fields = line.split(" ");
Seulement le problème est encore présent car à chaque espace il me créer une nouvelle ligne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 String[] fields = line.split("\\s");
J'ai donc tenté de faire une vérification par la suite pour supprimer ces ligne de la liste, ce qui donne :
à la suite dans ParserUtils.java
J'ai tenté plusieurs choses dans les parenthèse comme par exemple de nouveau l'expression régulière "\\s" ou encore une chaîne vide mais rien n'y fait !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 for(int i = 0; i < allFields.size(); i++){ if(allFields.get(i).equals(" ")){ allFields.remove(i); } }
Partager