[Regex] Conversion PERL -> Java d'une expression régulière
Bonjour à tous,
Voici mon problème, j'ai codé un petit bout de programme en PERL afin de rendre lisibles des fichiers de préférences utilisateurs d'un progiciel.
En PERL ça marche très bien et je souhaitais créer une interface graphique JAVA afin de modifier les valeurs de paramètres préférentiels et permettre des modifications de masse.
J'ai construit tout le programme mais je coince sur la conversion de mes regexp de remplacement en JAVA.
Voici le code PERL
Code:
1 2 3
|
$hex_string =~ s/\xff\xfe\xff(.|\x0A)/\x0D\x0A/g;
$hex_string =~ s/\x00//g; |
Je crée donc une copie de mon fichier d'entrée dans lequel je remplace la séquence FF FE FF XX en hexadécimal par \r\n.
Je supprime ensuite les 00 intercalés partout qui perturbent la lecture du fichier.
En java, je fais :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| FileInputStream fis = new FileInputStream(spfFile);
FileOutputStream fos = new FileOutputStream(copiedSPFFile);
BufferedReader in = new BufferedReader(new InputStreamReader(fis));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(fos));
Pattern origPattern = Pattern.compile("\\xFF\\xFE\\xFF",Pattern.DOTALL);
Matcher m = origPattern.matcher("");
String aLine = null;
while ((aLine = in.readLine()) != null) {
m.reset(aLine);
String result = m.replaceAll("\\x0D\\x0A");
out.write(result);
}
in.close();
out.close(); |
Pour le premier remplacement, ça ne marche pas du tout, rien n'est modifié dans mon fichier de destination.
Puis :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| FileInputStream fis = new FileInputStream(spfFile);
FileOutputStream fos = new FileOutputStream(copiedSPFFile);
BufferedReader in = new BufferedReader(new InputStreamReader(fis));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(fos));
Pattern origPattern = Pattern.compile("\\x00",Pattern.DOTALL);
Matcher m = origPattern.matcher("");
String aLine = null;
while ((aLine = in.readLine()) != null) {
m.reset(aLine);
String result = m.replaceAll("");
out.write(result);
}
in.close();
out.close(); |
Pour la suppression des 00, ça semble marcher mais ça ne donne pas du tout le même résultat qu'en PERL. Les 00 sont supprimés mais certaines parties du fichier sont aussi altérées.
Merci d'avance pour votre aide et bonne journée à tous.