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 :
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{
 
	}
 
	}
 
}
Grâce a mon code j'arrive a obtenir le xml du fichier principal :

<?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>
et son nouveau texte modifier ( car il me faut un format comme celui ci pour qu'il puisse être traiter par l'IHM ) :

#!/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
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.
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 ?