IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

[Regex] Conversion PERL -> Java d'une expression régulière


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 12
    Points
    12
    Par défaut [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 : 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 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 : 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();
    Pour le premier remplacement, ça ne marche pas du tout, rien n'est modifié dans mon fichier de destination.

    Puis :
    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();
    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.

  2. #2
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    Bonjour à tous,

    J'ai trouvé la solution grace à fearyourself du chat Developpez.com

    La solution est toute bête mais il fallait y penser, au lieu d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		Pattern origPattern = Pattern.compile("\\xFF\\xFE\\xFF");
    		String aLine = null; 
     
    		while ((aLine = in.readLine()) != null) { 
    			Matcher m = origPattern.matcher(aLine); 
    			String result = m.replaceAll("\\x0D\\x0A");
    			out.write(result); 
    		}
    il fallait mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		Pattern origPattern = Pattern.compile("\\xFF\\xFE\\xFF");
    		String aLine = null; 
     
    		while ((aLine = in.readLine()) != null) { 
    			Matcher m = origPattern.matcher(aLine); 
    			String result = m.replaceAll(""+ ((char) 0x0D) + ((char) 0x0A));
    			out.write(result); 
    		}
    Car dans le replaceAll, "\\x0D\\x0A" est interprétée comme une banale chaine de caractères alors que je veux remplacer ma séquence hexadécimale par une autre séquence hexadécimale.

    Voila tout.

    Bonne journée à tous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD-2007] [Regex] Prise en compte du retour chariot dans une expression régulière
    Par MyKroPhone dans le forum VBA Word
    Réponses: 1
    Dernier message: 21/08/2014, 14h15
  2. Réponses: 11
    Dernier message: 07/04/2010, 17h51
  3. [REGEX] trouver le max à l'aide d'une expression régulière
    Par miketidy dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 20/06/2008, 15h17
  4. [c# REGEX]Problème avec une expression régulière
    Par mezzo_998 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 24/11/2007, 13h03
  5. [Regex] Vérifier qu'une chaîne respecte une expression régulière
    Par PeteMitchell dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 13/05/2004, 14h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo