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

Java Discussion :

Erreur "Illegal group reference"


Sujet :

Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 180
    Par défaut Erreur "Illegal group reference"
    Bonjour,

    J'ai un problème au niveau d'une de mes méthodes et je n'arrive pas à trouver la solution. Pouvez vous me guider?

    Je m'explique :

    j'ai un fichier texte ci dessous :

    #!/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 = $jhgjgh + {k}
    set d = $toto + {d}
    set nono = {nono}
    set c = {c} + $toto
    set a = {a}
    #<
    umask 002

    #----------------------------------------------------------------------
    jnfjkg
    $gdfgdfg
    dfgdfgdfg74654654fdg
    fdgdfg
    fgdf
    fgfg
    fg;hmfh
    dfdsfgdfg
    set khjkhjkhkj 8787687657
    titi
    set b
    set e
    son xml associé :

    Code xml : 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
    <?xml version="1.0" encoding="utf-8"?>
    <parametters>
    	<value name = "dir_listing">
    		jdfgjkdfnbjkdfnbjnfdbndfjbndfbndfkb
    	</value>
    	<value name = "toto">
    		tata
    	</value>
    	<value name = "k">
    		kop
    	</value>
    	<value name = "d">
    		9
    	</value>
    	<value name = "nono">
    		ueueue777
    	</value>
    	<value name = "c">
    		7
    	</value>
    	<value name = "a">
    		titi
    	</value>
    </parametters>

    et mes méthodes :

    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
    	/**
             * affiche le nouveaux texte entier modifié ( la partie entre ZONE_B et ZONE_E modifiée : keys => values) 
             * @param ZONE_B
             * @param ZONE_E
             * @param cl
             * @param texteRef
             * @param filename
             * @return
             */
    	public String  recupValues( String ZONE_B, String ZONE_E,  Classement cl , String filename, String texteRef, String VALUE_B, String VALUE_E ){
     
    		Finally fp = new Finally();
     
    		String c = fp.valeursKeys(VALUE_B, VALUE_E, cl, texteRef);
     
    		c = ZONE_B.concat(c).concat(ZONE_E);
     
    		// lecture fichier CSH
    		StringBuilder texte = new StringBuilder();
     
    		try{
    			BufferedReader buff = new BufferedReader(new FileReader(filename));
     
    			try {
    				String line;
    				while ((line = buff.readLine()) != null) {
    					texte.append(line+"\n" );
    				}
    			} finally {
    				buff.close();
    			}
    		} catch (IOException ioe) {
    			System.out.println("Erreur --" + ioe.toString());
    		}
     
    		//System.out.println(texte.toString());
     
    		String fullText = texte.toString();
    		System.out.println(fullText);
     
    		String motif = "(?s)symbole1.*?symbole2"; // ex : symbole1 = #> ; symbole2 = #<
    		motif = motif.replaceFirst("symbole1", ZONE_B);
    		motif = motif.replaceFirst("symbole2", ZONE_E);
     
    		fullText = fullText.replaceFirst(motif, c);
     
    		return fullText;
     
    	}

    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
    /**
             * Lit le fichier spécifié et extrait la partie située entre ZONE_B et ZONE_E
             * @param filename nom du fichier
             * @return la chaîne extraite ou null si aucune chaîne trouvée, ou si le fichier n'existe pas
             */
    	public String extract(String filename, String ZONE_B, String ZONE_E) { 
     
    		try {
     
    			StringBuilder stringBuilder = new StringBuilder();  
     
    			BufferedReader buff = new BufferedReader(new FileReader(filename));
     
    			try {
    				String line;
     
    				while ((line = buff.readLine()) != null) { 
    					stringBuilder.append(line);  
    					stringBuilder.append('\n');
    				}
    			} finally {
    				buff.close();
    			}
     
    			String toutLeFichier = stringBuilder.toString();  
     
    			int a = toutLeFichier.indexOf(ZONE_B);
    			int b = toutLeFichier.indexOf(ZONE_E);
     
    			if (a >= 0 && b >= 0) { 
    				return toutLeFichier.substring(a + ZONE_B.length(), b); 
    			}
     
    		}
     
    		catch( FileNotFoundException e) {
    			System.err.println("Fichier " + new File(filename).getAbsolutePath() + " introuvable"); 
    		}
    		catch (IOException ioe) {
    			System.err.println("Erreur --" + ioe.getMessage());
    			ioe.printStackTrace();
    		}
     
    		return null;
     
    	}

    le problème c'est que quand je lance mon main :
    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
     
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
     
     
    public class Tests {
     
    	public static void main(String[] args) {
     
    		String filePath = "C:\\Users\\ksmaili\\workspace\\fichiertraitable.txt";
    		Finally fn = new Finally();
    		String ZONE_B = "#>";
    		String ZONE_E = "#<";
    		String VALUE_B = "{";
    		String VALUE_E =  "}";
    		Classement cl = new Classement();
    		/*String texteRef = "set dir_listing =  {dir_listing}" + 
    							"set toto =  {toto}" + 
    							"set k = $jhgjgh +  {k}"+
    							"set d = $toto +  {d}" + 
    							"set nono =  {nono}" +
    							"set c =  {c} + $toto" +
    							"set a =  {a}" ;
    		*/
     
     
    		// lire filezPath : 
    		try{
    		BufferedReader buff = new BufferedReader(new FileReader(filePath));
     
    		try {
    		String line;
     
    		while ((line = buff.readLine()) != null) {
    		//System.out.println(line);
    		}
    		} finally {
    		buff.close();
    		}
    		} catch (IOException ioe) {
    		System.out.println("Erreur --" + ioe.toString());
    		}
     
     
    		String p = fn.extract(filePath, ZONE_B, ZONE_E);
    		System.out.println(p);
    		String h = fn.recupValues(ZONE_B, ZONE_E, cl, filePath, p, VALUE_B, VALUE_E);
    		//System.out.println(h);
     
     
     
    	}
     
    }

    J'ai cette erreur là qui s'affiche :

    Exception in thread "main" java.lang.IllegalArgumentException: Illegal group reference
    at java.util.regex.Matcher.appendReplacement(Unknown Source)
    at java.util.regex.Matcher.replaceFirst(Unknown Source)
    at java.lang.String.replaceFirst(Unknown Source)
    at Finally.recupValues(Finally.java:249)
    at Tests.main(Tests.java:48)
    Avez vous une idée ?

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    replaceFirst, ça utilise les regexp, donc toute la panoplie ce caractères spéciaux, y compris dans la valeur de remplacement où un \1 demande le premier groupe par exemple. Ce qui est problématique car je suppose qu'ici tu veux juste faire un remplacement d'une chaine fixe par une autre chaine fixe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    motif = motif.replaceFirst("symbole1", ZONE_B);
    Meme problème avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		fullText = fullText.replaceFirst(motif, c);
    Utilise ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    motif = motif.replaceFirst("symbole1",Matcher.quoteReplacement(ZONE_B) );
    pareil pour le reste où tu ne veux pas interpréter le résultat.

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/07/2007, 14h17
  2. Erreur compilation "undefined reference to "
    Par ViRouF dans le forum C++
    Réponses: 5
    Dernier message: 02/03/2007, 14h55
  3. Réponses: 3
    Dernier message: 24/11/2006, 18h20
  4. Réponses: 5
    Dernier message: 20/10/2006, 14h31
  5. Réponses: 1
    Dernier message: 04/10/2006, 09h01

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