Finally.java
Bonjour,
Alors voilà j'ai un texte :
#!/bin/csh -xv
#BSUB -J calmod_POGO_2CU fichie.txt
#BSUB -o calmod_POGO_2CU.o%J
#BSUB -L /bin/csh
umask 002
#----------------------------------------------------------------------
set dir_listing = jdfgjkdfnbjkdfnbjnfdbndfjbndfbndfkb
jnfjkg
$gdfgdfg
dfgdfgdfg74654654fdg
fdgdfg
fgdf
set toto = tata
fgfg
fg;hmfh
set toto = tutu2
dfdsfgdfg
set nono = ueueue777
set khjkhjkhkj 8787687657
titi = tutu
set a = titi
set b = $toto
set c = 7 + $toto
set d = $toto + 9
set e = $nono + $toto
set k = $jhgjgh + {k}
et mon code :
Grâce a mon code j'arrive a obtenir le xml du fichier principal :
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
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167 import java.awt.List; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Iterator; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Elle recup ligne de forme : set ... = ... sans le $(...) * @author ksmaili *return : 1 fichier xml + le fichier texte de type CSH que l'on veux */ public class RecupLineWithoutSymboleTest { private static String[] testVar; private static ArrayList<String> indexes = new ArrayList<>(); private static ArrayList<String> Liste1 = new ArrayList<String>(); public static void main(String[] args) throws IOException { final String fichier = "C:\\Users\\ksmaili\\workspace\\fichiertxtP2CSH.txt"; String xmlFileName = "C:\\Users\\ksmaili\\workspace\\XMLpartie2.xml"; Classement cl = new Classement(); Finally fnl = new Finally(); // lit le fichier ligne par ligne try { // lire un fichier final InputStream ips = new FileInputStream(fichier); final InputStreamReader ipsr = new InputStreamReader(ips); final BufferedReader br = new BufferedReader(ipsr); // lire ligne par ligne String ligne; while ((ligne = br.readLine()) != null) { // System.out.println(ligne); // je splite pour avoir la clé et la valeur pour une comparaison prochaine testVar = ligne.split("="); if (ligne.matches("^set.*=.*") && !ligne.contains("$")) { // je ne fais rien car la ligne est correcte et correspond par exemple a set blabla = 12 } else if (ligne.matches("^set.*=.*") && ligne.contains("$")) { // parcourir la liste de la methode lineDollar() ArrayList<String> listVal = fnl.lineDollar(ligne); Iterator it = listVal.iterator(); // Vérifier la position avant ou apres du $... // Si la ligne est du style set blabla = $asd + 34 alors il me faut supprimer $asd et le signe + ligne = fnl.count(ligne); } else { // dans le cas contraire exemple eewewewewewewewew ou esd = wwewe alors je mettre la ligne vide ligne = ""; } // Si la ligne n´est pas vide if (ligne.length() > 0) { // je verifie si son index peut etre creer et sauvegarder dans la liste d´indexes ou pas if (fnl.creerIndex(testVar[0])) { //System.out.println("On récupère : " + ligne); Pattern p=Pattern.compile("^set(.*)=(.*)"); Matcher m=p.matcher(ligne); while(m.find()) { //System.out.println(m.group(1)); // affiche les clés //System.out.println(m.group(2)); // affiche les valeurs des clés // Maintenant je vérifie si la clé est déjà présente dans la map boolean cle = cl.verif(m.group(1)); boolean valeur = cl.verif(m.group(2)); // Si elle n'est pas présente, on l'ajoute dans la map if (cle != true && valeur != true ){ cl.add(m.group(1), m.group(2)); //System.out.println(cle); } } } } else { // stoker testvar dans une liste afin de pouvoir l'écrire plus tard Liste1.add(testVar[0]); } } br.close(); // On ferme le flux // ecrire le xml cl.ecrire(xmlFileName); //ouvrir un fichier en ecriture try { BufferedWriter buf = new BufferedWriter(new FileWriter(new File("C:\\Users\\ksmaili\\workspace\\nouveaufichier.txt"))); // boucler sur les 6 er lignes de la liste de lignes sans traitement int i; int fin = 5; for (i=0; i<fin; i++){ buf.write(Liste1.get(i)+"\n"); } // ecrire la partie qui dépend du dico buf.write("#>"+ "\n"); // cree iterator pour parcourir cl.recup() Iterator<String> iterat = cl.recup().iterator(); while (iterat.hasNext() ){ Object element = iterat.next().trim(); //System.out.print(element + " "); buf.write("set " + element +" =" + " {"+element+"}" +"\n"); } buf.write("#<"+ "\n"); //ecrire les lignes suivantes de la liste de lignes sans traitement for (i=fin; i<Liste1.size(); i++){ buf.write(Liste1.get(i)+"\n"); } buf.close(); } catch (final Exception e) { System.out.println(e.toString()); } finally{ } // if(!ligne.contains("$")){ } catch (final Exception e) { System.out.println(e.toString()); }finally{ } } }
et son nouveau texte modifier ( car il me faut un format comme celui ci pour qu'il puisse être traiter par l'IHM ) :<?xml version="1.0" encoding="utf-8"?>
<parametters>
<value name = "dir_listing">
jdfgjkdfnbjkdfnbjnfdbndfjbndfbndfkb
</value>
<value name = "toto">
tata
</value>
<value name = "k">
{k}
</value>
<value name = "d">
9
</value>
<value name = "nono">
ueueue777
</value>
<value name = "c">
7
</value>
<value name = "a">
titi
</value>
</parametters>
maintenant mon problème est que j'aimerai créer une fonction qui puisse me dire si ma chaine de caractère est situer avant la valeur de la clé ou après.#!/bin/csh -xv
#BSUB -J calmod_POGO_2CU fichie.txt
#BSUB -o calmod_POGO_2CU.o%J
#BSUB -L /bin/csh
#>
set dir_listing = {dir_listing}
set toto = {toto}
set k = {k}
set d = {d}
set nono = {nono}
set c = {c}
set a = {a}
#<
umask 002
#----------------------------------------------------------------------
jnfjkg
$gdfgdfg
dfgdfgdfg74654654fdg
fdgdfg
fgdf
correspond a la valeur de la clé fgfg
fg;hmfh
dfdsfgdfg
set khjkhjkhkj 8787687657
titi
set b
set e
par exemple un boolean qui me renvoi 1 si => chaine avant la valeur de la clé
ou 0 si => chaine après la valeur de la clé {d} ( voir xml )
exemple : si je lui donne la ligne set d = $toto + 9 , le programme doit vérifier la position du $toto
ps : mon code fonctionne, mais lague beaucoup quand je fais run !
bizarre nan ?
Partager