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 Perl Discussion :

problème recherche sur ligne


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 236
    Points : 110
    Points
    110
    Par défaut problème recherche sur ligne
    Bonjour,

    Je rencontre un petit soucis,

    Je dois remplacer sur une ligne tout les " ||ls...." par "SalSetBuffer"

    Mon code marche bien, cependant si je rencontre deux fois "||ls..." sur la même ligne, mon code change juste le premier en "SalSetBuffer" alors que je voudrais modifier tout les "||ls..." présent sur la même ligne.

    Voici mon code :

    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
    # !usr/bin/perl -w
    use strict;
    use warnings;
     
    my $cpt = 0; #Compteur pour compter le nombre de lignes
    my $var ;
    my $compteur = 0;
     
    my @liste =();
     
     
    open FICHIER, '<', "X7_M52.apt" or die("E/S : $!\n");
    open ECRIRE,  '>', "new_X7_M52.apt" or die("new_X7_M52.apt");
     
    while ( my $ligne = <FICHIER>){
    	$cpt ++;
     
    	if ($ligne =~ m/\|\|ls(.+)/){
    		$var = $1;
    		$var = "ls${var}";
     
    		@liste = split(/\|/, $var); 
     
    		print $liste[0];
    		print " ligne ",$cpt, " If : A ";
    		print"\n";
    		$compteur++;
     
    		$ligne =~  s/${liste[0]}/SalSetBufferLength(${liste[0]},(SalStrength(${liste[0]})*2)+2)/;
    		print ECRIRE  $ligne;
    		# print "\n", $ligne, "\n";
    	}
    	# print ECRIRE $ligne;
    }
    print  "Total : Il y a ", $compteur, " ls \n";
     
    #######################################################################################################
    #                                         Compteur                                                    #
    #######################################################################################################
     
        print "-------------------------------------------------------\n";
        print "|---- parserLs.pl a parcouru ", $cpt, " lignes ----|\n";
        print "-------------------------------------------------------\n";
     
    #######################################################################################################
    #                            Fin du traitement et Fermeture Fichiers                                  #
    #######################################################################################################
     
        print "-------------------------------------------------------\n";
        print "|----------------  Fin du traitement  ----------------|\n";
        print "-------------------------------------------------------\n";
     
    close FICHIER;
    close ECRIRE;
    Fichier/Ligne origine (en entrée):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ! If CmSqlExist(lsSelect||' '||lsFrom||' '||lsWhere)
    Résultat (en sortie) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ! If CmSqlExist(lsSelect||' '||SalSetBufferLength(lsFrom,(SalStrength(lsFrom)*2)+2)||' '||lsWhere)
    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ! If CmSqlExist(lsSelect||' '||SalSetBufferLength(lsFrom,(SalStrength(lsFrom)*2)+2)||' '||lsSelect||' '||SalSetBufferLength(lsWhere,(SalStrength(lsWhere)*2)+2))
    Je pense que c'est un problème simple a résoudre pour affecter ma conditions sur toute la ligne mais je tourne en rond...

    En vous remerciant par avance de m'aider/guider

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 35
    Points : 42
    Points
    42
    Par défaut
    Il suffit d'ajouter l'option "g" a ton expression réguliaire (g comme global: tu fera dans ce cas toutes les substitutions).
    Cela devrait résoudre ton problème.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ligne =~  s/${liste[0]}/SalSetBufferLength(${liste[0]},(SalStrength(${liste[0]})*2)+2)/g;
    Tu devrais alors avoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ! If CmSqlExist(lsSelect||' '||SalSetBufferLength(lsFrom,(SalStrength(lsFrom)*2)+2)||' '||SalSetBufferLength(lsWhere,(SalStrength(lsWhere)*2)+2))
    Par contre je comprends pas pourquoi il y a ||lsSelect||' ' entre tes deux SalSetBuffer.
    Es-ce normal ou juste une petite erreur?
    Si c'est normal il te faut trouver un moyen d'ajouter des lsSelect entre chaque SalSetBuffer avec une autre expression reguliaire

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 236
    Points : 110
    Points
    110
    Par défaut
    Bonjour,

    Merci pour ta réponse.

    Pour le ||lsSelect||' ' entre tes deux SalSetBuffer c'est une erreur de ma part, ne pas en tenir compte, je te refais une autre exemple.

    J'ai fais a modification, en effet j'ai plus de résultat mais pas encore tout qui est remonté, regarde ci dessous :

    Mon code modifié :

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    # !usr/bin/perl -w
    use strict;
    use warnings;
     
    my $cpt = 0; #Compteur pour compter le nombre de lignes
    my $var ;
    my $compteur = 0;
    my $ligneold;
     
    my @liste =();
     
     
    open FICHIER, '<', "X7_M52.apt" or die("E/S : $!\n");
    open ECRIRE,  '>', "new_X7_M52.apt" or die("new_X7_M52.apt");
     
    while ( my $ligne = <FICHIER>){
    	$cpt ++;
     
    	if ($ligne =~ m/\|\|ls(.+)/g){
    		$ligneold = $ligne;
    		$var = $1;
    		$var = "ls${var}";
     
    		@liste = split(/\|/, $var); 
     
    		print $liste[0];
    		print " ligne ",$cpt, " If : A ";
    		print"\n";
    		$compteur++;
     
    		$ligne =~  s/${liste[0]}/SalSetBufferLength(${liste[0]},(SalStrength(${liste[0]})*2)+2)/g;
    		print ECRIRE  $ligneold, "ligne ", $cpt, $ligne,"\n";
    		# print "\n", $ligne, "\n";
    	}
    	if ( $ligne =~ m/\|\|\sls(.+)/g){
    		$ligneold = $ligne;
    		$var = $1;
    		$var = "ls${var}";
     
    		@liste = split(/'/, $var); 
    		@liste = split(/\|/, $var); 
    		@liste = split(/\)/, $var); 
    		@liste = split(/ /, $var); 
     
    		$liste[0] =~ s/\)/ /g;
    		$liste[0] =~ s/,/ /g;
     
    		print $liste[0];
    		print " ligne ",$cpt, " If : B ";
    		print"\n";
    		$compteur++;
     
    		$ligne =~  s/${liste[0]}/SalSetBufferLength(${liste[0]},(SalStrength(${liste[0]})*2)+2)/g;
    		print ECRIRE  $ligneold, "ligne ", $cpt, $ligne,"\n";
    		# print "\n", $ligne, "\n";
    	}
     
    	# print ECRIRE $ligne;
    }
    print  "Total : Il y a ", $compteur, " ls \n";
     
    #######################################################################################################
    #                                         Compteur                                                    #
    #######################################################################################################
     
        print "-------------------------------------------------------\n";
        print "|---- parserLs.pl a parcouru ", $cpt, " lignes ----|\n";
        print "-------------------------------------------------------\n";
     
    #######################################################################################################
    #                            Fin du traitement et Fermeture Fichiers                                  #
    #######################################################################################################
     
        print "-------------------------------------------------------\n";
        print "|----------------  Fin du traitement  ----------------|\n";
        print "-------------------------------------------------------\n";
     
    close FICHIER;
    close ECRIRE;
    Mon fichier en entrée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set lsSelect = 'SELECT ' || lsSelect || ' FROM ' || lsFrom || ' WHERE ' || lsWhere || ' FOR UPDATE NOWAIT '
    Mon fichier en sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set SalSetBufferLength(lsSelect,(SalStrength(lsSelect)*2)+2) = 'SELECT ' || SalSetBufferLength(lsSelect,(SalStrength(lsSelect)*2)+2) || ' FROM ' || lsFrom || ' WHERE ' || lsWhere || ' FOR UPDATE NOWAIT '
    Au lieu de ce résultat attendu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set SalSetBufferLength(lsSelect,(SalStrength(lsSelect)*2)+2) = 'SELECT ' || SalSetBufferLength(lsSelect,(SalStrength(lsSelect)*2)+2) || ' FROM ' || SalSetBufferLength(lsFrom,(SalStrength(lsFrom)*2)+2) || ' WHERE ' || SalSetBufferLength(lsWhere,(SalStrength(lsWhere)*2)+2) || ' FOR UPDATE NOWAIT '
    Mon scripte a bien fait la modification sur les deux premier lsSelectet lsSelect... mais pas sur les deux derniers lsFrom et lsWhere

    Tu as une idée ?

    Merci d'avance

  4. #4
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 236
    Points : 110
    Points
    110
    Par défaut
    J'ai reussi avec une petite boucle !

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    # !usr/bin/perl -w
    use strict;
    use warnings;
     
    my $cpt = 0; #Compteur pour compter le nombre de lignes
    my $var ;
    my $compteur = 0;
    my $ligne_en_cours;
    my $bRAS;
     
    my @liste =();
     
     
    open FICHIER, '<', "X7_M52.apt" or die("E/S : $!\n");
    open ECRIRE,  '>', "new_X7_M52.apt" or die("new_X7_M52.apt");
     
    while ( my $ligne = <FICHIER>){
    	$cpt ++;
     
    	$ligne_en_cours = $ligne;
    	$bRAS=0;
     
     
    	while ($bRAS == 0){
    		if ($ligne_en_cours =~ m/\|\|ls(.+)/){
    			$var = $1;
    			$var = "ls${var}";
     
    			@liste = split(/\|/, $var); 
     
    			# print $liste[0];
    			# print " ligne ",$cpt, " If : A ";
    			# print"\n";
    			$compteur++;
     
    			$ligne_en_cours =~  s/${liste[0]}/SalSetBufferLength(${liste[0]},(SalStrength(${liste[0]})*2)+2)/g;
    			print ECRIRE  $ligne_en_cours;
    			# print "\n", $ligne, "\n";
    		}
    		elsif ( $ligne_en_cours =~ m/\|\|\sls(.+)/){
    			$var = $1;
    			$var = "ls${var}";
     
    			@liste = split(/'/, $var); 
    			@liste = split(/\|/, $var); 
    			@liste = split(/\)/, $var); 
    			@liste = split(/ /, $var); 
     
    			$liste[0] =~ s/\)/ /;
    			$liste[0] =~ s/,/ /;
     
    			# print $liste[0];
    			# print " ligne ",$cpt, " If : B ";
    			# print"\n";
    			$compteur++;
    			# print $ligne_en_cours;
    			$ligne_en_cours =~  s/${liste[0]}/SalSetBufferLength(${liste[0]},(SalStrength(${liste[0]})*2)+2)/g;
    			# print  $ligne_en_cours;
    			print ECRIRE  $ligne_en_cours;
    			# print "\n", $ligne, "\n";
    		}
    		else {
    			$bRAS=1;
    		}
    	}
    	# print ECRIRE $ligne_en_cours
    	# print ECRIRE $ligne;
    }
    print  "Total : Il y a ", $compteur, " ls \n";
     
    #######################################################################################################
    #                                         Compteur                                                    #
    #######################################################################################################
     
        print "-------------------------------------------------------\n";
        print "|---- parserLs.pl a parcouru ", $cpt, " lignes ----|\n";
        print "-------------------------------------------------------\n";
     
    #######################################################################################################
    #                            Fin du traitement et Fermeture Fichiers                                  #
    #######################################################################################################
     
        print "-------------------------------------------------------\n";
        print "|----------------  Fin du traitement  ----------------|\n";
        print "-------------------------------------------------------\n";
     
    close FICHIER;
    close ECRIRE;
    Merci encore

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

Discussions similaires

  1. [XL-2000] Problème recherche et déplacement sur la ligne
    Par juju05 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 18/12/2011, 11h02
  2. Problème : Recherche de valeur sur Excel
    Par tzehani dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 07/08/2007, 16h04
  3. Recherche titre sur ligne et copie colonne
    Par baptbapt dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 26/07/2006, 15h31
  4. Problème recherche sur critère
    Par Sendo dans le forum Access
    Réponses: 1
    Dernier message: 08/03/2006, 00h51
  5. [JTextArea] Problème ecriture sur plusieurs lignes
    Par Cyborg289 dans le forum Composants
    Réponses: 3
    Dernier message: 23/09/2005, 10h22

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