-
Notifications
You must be signed in to change notification settings - Fork 0
/
Analyseur.java
100 lines (86 loc) · 2.68 KB
/
Analyseur.java
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
import java.io.*;
import java.nio.file.Paths;
import java.util.*;
import static java.util.AbstractMap.SimpleImmutableEntry;
/** Réaliser un traitement sur les données d'une source. */
public class Analyseur {
private enum TypeFichier {
NULL, TXT_1, TXT_2
}
private Map<String, Donnees> donnees;
private Traitement traitement;
private TypeFichier typeFichier;
public Analyseur(Traitement traitement) {
Objects.requireNonNull(traitement);
this.donnees = new HashMap<>();
this.traitement = traitement;
this.typeFichier = TypeFichier.NULL;
}
private TypeFichier detecterTypeFichier(String source) {
if (source.endsWith("-f2.txt") || source.equals("donnees-erreur.txt")) {
return TypeFichier.TXT_2;
} else if (source.endsWith(".txt")) {
return TypeFichier.TXT_1;
}
return TypeFichier.NULL;
}
/* x y id(ignoré) valeur */
private void chargerFichierType1(Scanner sc, Donnees donnees) {
Position p = new Position(sc.nextInt(), sc.nextInt());
double valeur;
// skip id
sc.next();
valeur = sc.nextDouble();
// Enregistrement
donnees.ajouter(p, valeur);
}
/* id(ignoré) x y texte(ignoré) valeur texte[0](ignoré) */
private void chargerFichierType2(Scanner sc, Donnees donnees) {
// skip id
sc.next();
Position p = new Position(sc.nextInt(), sc.nextInt());
double valeur;
// skip text
sc.next();
valeur = sc.nextDouble();
// Enregistrement
donnees.ajouter(p, valeur);
}
public void chargerFichier(String source) throws FileNotFoundException {
this.typeFichier = this.detecterTypeFichier(source);
try {
Scanner sc = new Scanner(new File(source)).useLocale(Locale.US);
Donnees donnees = new Donnees();
while (sc.hasNext()) {
switch (this.typeFichier) {
case TXT_1:
this.chargerFichierType1(sc, donnees);
break;
case TXT_2:
this.chargerFichierType2(sc, donnees);
break;
default:
throw new Exception("Format du fichier non supporté");
}
}
sc.close();
this.donnees.put(Paths.get(source).getFileName().toString().substring(0, source.lastIndexOf('.')), donnees);
} catch (Exception ex) {
ex.printStackTrace();
}
}
/** Charger l'analyseur avec les données de la source. */
public void traiter(Iterable<SimpleImmutableEntry<Position, Double>> source, String nomLot) {
this.traitement.gererDebutLot(nomLot);
for (SimpleImmutableEntry<Position, Double> info : source) {
Double valeur = info.getValue();
Position p = info.getKey();
this.traitement.traiter(p, valeur);
}
this.traitement.gererFinLot(nomLot);
}
/** Charger l'analyseur avec un lot de données défini. */
public void traiterLot(String nomLot) {
this.traiter(this.donnees.get(nomLot).list, nomLot);
}
}