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
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $hex_string =~ s/\xff\xfe\xff(.|\x0A)/\x0D\x0A/g; $hex_string =~ s/\x00//g;
Je supprime ensuite les 00 intercalés partout qui perturbent la lecture du fichier.
En java, je fais :
Pour le premier remplacement, ça ne marche pas du tout, rien n'est modifié dans mon fichier de destination.
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 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();
Puis :
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.
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 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();
Merci d'avance pour votre aide et bonne journée à tous.
Partager