Modifier une chaine de caractère d'un fichier

Fermé
khalous91 Messages postés 18 Date d'inscription mercredi 15 avril 2015 Statut Membre Dernière intervention 17 juin 2015 - 11 mai 2015 à 14:08
khalous91 Messages postés 18 Date d'inscription mercredi 15 avril 2015 Statut Membre Dernière intervention 17 juin 2015 - 11 mai 2015 à 14:33
Bonjour
alors j'ai un fichier ci dessus :
#> should be formatted by calmod_python
set conf_etudie = "{poli}_{ter}_sylda_{h_sylda}"
set dir_listing = "{userPath}/{poli}/script/{poli}_{ter}_sylda_{h_sylda}/{conf_cu}/{logName}/{horodate}/listing"
set dir_tem = "{userPath}/{poli}/script/{poli}_{ter}_sylda_{h_sylda}/{conf_cu}/{logName}/{horodate}/temoin"
set dir_res = "{userPath}/{poli}/script/{poli}_{ter}_sylda_{h_sylda}/{conf_cu}/{logName}/{horodate}/results"
set dir_UCI_cree = "{userPath}/{poli}/script/{poli}_{ter}_sylda_{h_sylda}/{conf_cu}/{logName}/{horodate}/UCI_cree"
#< end the formatted line



et je dois trouver une méthode qui puisse me transformer tout les caractères qu'il y a entre : {} avec ceux que je veux !
par exemple {poli} je dois le transformer en {polichon}
{ter} en {terrien}

et en sortie je devrai avoir le même fichier mais avec les nouvelles chaine de caractère voulu entre accolades.


avez vous une idée?

j'ai entendu parler de la méthode indexof()..mais je n'en sais pas plus
A voir également:

1 réponse

khalous91 Messages postés 18 Date d'inscription mercredi 15 avril 2015 Statut Membre Dernière intervention 17 juin 2015
11 mai 2015 à 14:33
en faite si sa peut vous paraître plus simple, j'ai ce code :

import java.util.Collection;
import java.util.LinkedHashSet;

public class Extract {

public static void main(String[] args) {

final String ZONE_B = "#>";
final String ZONE_E = "#<";
final String VALUE_B = "{";
final String VALUE_E = "}";



Collection<String> mots = new LinkedHashSet<>(); // si on voulait avoir tous les mots : Collection<String> mots = new ArrayList<>();


String string = "#----------------------------------------------------------------------\n" +
"#{toto}"+
"# Variables\n" +
"#----------------------------------------------------------------------\n" +
"#> should be formatted by calmod_python\n" +
"set conf_etudie = \"{etude}_{SIT}_sylda_{h_sylda}\"\n" +
"set dir_listing = \"{userPath}/{etude}/script/{etude}_{SIT}_sylda_{h_sylda}/{conf_cu}/{logName}/{horodate}/listing\"\n" +
"set dir_tem = \"{userPath}/{etude}/script/{etude}_{SIT}_sylda_{h_sylda}/{conf_cu}/{logName}/{horodate}/temoin\"\n" +
"set dir_res = \"{userPath}/{etude}/script/{etude}_{SIT}_sylda_{h_sylda}/{conf_cu}/{logName}/{horodate}/results\"\n" +
"set dir_UCI_cree = \"{userPath}/{etude}/script/{etude}_{SIT}_sylda_{h_sylda}/{conf_cu}/{logName}/{horodate}/UCI_cree\"\n" +
"#< end the formatted line\n" +
"set fic_tem = calmod.tem\n" +
"#----------------------------------------------------------------------\n";

String[] tab = string.split("\n").clone();

for ( int i = 0; i < tab.length; i++ ) { // on pourrait faire comme ça aussi : for(String line : tab ) {

System.out.println(i + " : " + tab[i]);

int index1 = tab[i].indexOf("{"); // nous donne l'emplacement du premier "{"
while( index1>=0 ) { // tant qu'on trouve une {


int index2 = tab[i].indexOf("}", index1); // on cherche le } qui suit
if ( index2>= 0 ) { // si on trouve un }

// on pourrait tester ici un cas d'erreur si on a 2 { qui se suivent sans } entre :
int index3 = tab[i].lastIndexOf("{", index2); // on cherche le { qui précède le }
if ( index3!=index1 ) { // si ce n'est pas le même que index1, on a forcément { ... { ... }
System.err.println("Problème dans le fichier : { non fermée en " + index1 );
}

String x = tab[i].substring(index1+1, index2); // on extrait le mot trouvé entre { et } // ICI CORRECTION tab[i] à la place de yes et le +1 que j'ai oublié
// System.out.println("x = " + x); // et on l'affiche (ou on le stocke dans une ArrayList pour l'utiliser ailleurs...)

mots.add( x ); // on stocke le mot


}
else {

// on a trouvé un { mais pas de } après : c'est probablement une erreur
System.err.println("Problème dans le fichier : { non fermée en " + index1);
break; // on sort de la boucle, parce que ce n'est pas la peine de continuer de chercher

}

index1 = tab[i].indexOf("{", index2 ); // on cherche le mot suivant dans la ligne

} // fin de la boucle while

} // fin de la boucle for

for(String current : mots) // pour chaque String current dans mots
{
System.out.println(current); // on affiche current
}


// pour trouver les positions #> et #<
System.out.print("Found Index :" );
System.out.println(string.indexOf( "#>" ));
System.out.print("Found Index :" );
System.out.println(string.indexOf( "#<" ));

// pour extraire la chaîne entre la position premier incluse et la position dernier exclue.
int a = string.indexOf("#>");
int b = string.indexOf("#<");
}

}



qui lorsque l'on l'exécute nous affiche tout ce qui il y a entre {}
en output j'ai :

toto
etude
SIT
h_sylda
userPath
conf_cu
logName
horodate
Found Index :163
Found Index :707

et moi j'aimerai modifier c'est valeur
j'aimerai en sortie avoir :
a ( qui correspond a toto )
b ( qui correspond a etude )
c ( etc)
d
e
f
h

avez vous une petite idée ? thinks
0