Bonjour,
Je dois parser différents fichier de plusieurs millier de lignes chacun.
La méthode de parsing est la même qque soit le fichier, mais l'action a effectuer change.
Instinctivement, j'ai envie d'éviter de mettre dans le while un switch pour effectuer l'action suivant la donnée, histoire d'éviter 3 millions de tests.
En C++, il suffirait de passer une fonction en paramètre et de l'appliquer à la ligne.
En Java, comme le pointeur de fonction c'était trop simple, il faut créer une interface et une classe par type de fichier juste pour une pauvre fonction de deux lignes.
Donc mettons que c'est un gros projet java avec deja des tonnes de classes dans tous les sens, et que ça me dis rien d'en créer 20 autres pour deux lignes chacune, est ce qu'il n'y aurait pas un moyen plus clair et plus élégant pour résoudre mon probleme ?
voila ma fonction (pour info)
Merci d'avance, j'arrive pas à me faire à java encore.
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 public static String parseRequest(Node data, String info) throws Exception { // DECS int nb = 0; int pos = 0; byte[] temp = null; String[] tab = null; String line = null; String header = null; StringReader sr = null; BufferedReader br = null; String err = ""; sr = new StringReader(data.getTextContent()); br = new BufferedReader(sr); header = br.readLine(); pos = header.lastIndexOf(":"); info = header.substring(0, pos); nb = Integer.parseInt(header.substring(pos + 1, header.length())); while ( (line = br.readLine()) != null && nb > 0) { nb--; tab = line.trim().split("\t"); try { // ACTION A EFFECTUER } catch (Exception e) { err += line + "\n"; } } if (nb > 0) err += "Missing lines !\n"; else if (!br.readLine().equals(header)) err += "wtf #@!?\n"; br.close(); sr.close(); return err; }
Partager