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 de substitution


Sujet :

Langage Perl

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 43
    Par défaut Problème de substitution
    Salut,

    Je post pour un petit souci ...
    Je vous explique :
    - je m'appuie une liste de démarrage de serveurs formatée de la façon suivante :
    arbre(dépendances entre serveur d'où arbre qui est le nom du serveur le précédent);serveur;paramétre1(afin de savoir si le serveur fais partie d'un groupe de dépendance);service1;service2;...
    Concrètement si le serveur TATA doit démarrer après le serveur TUTU alors il y a marqué ça :
    TUTU;TATA;paramétre1;service ....

    - Dans le script, je vais chercher le groupe EVA et en sort tous les membres et les met dans un fichier que j'ai nommé exit.txt, jusque là NIKEL!!

    - Je voudrai faire en sorte que dans le exit.txt, si on ne retrouve pas le champs1 (TUTU) au moins une fois dans le champs2 (TATA ou autre, car peut importe la ligne), le champs1 recherché soit remplacé par le mot "INIT".

    - La substitution dans une condition me parait le plus adapté, mais j'ai tout essayé, je n'y arrive pas, surement problème de syntaxe ... j'en sait rien ...

    J'espère que j'ai été clair, s'il y des question n'hésitez pas!!!

    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
    #! /Perl/bin/perl -w
     
    use warnings;
    use strict;
     
    # Declaration des variables
    my ($arbre);
    my ($liste);
    my ($liste1);
    my ($param1);
    my ($serveur);
    my ($service1);
     
    # Ouverture des documents à lire
    open (F, 'liste.txt') || die ("Erreur d'ouverture de la liste !") ;
    open (RP, '>> exit.txt');
     
     
    # Boucle de recherche de dependance EVA
    while ($liste=<F>){
    		# Parse ligne par ligne du fichier liste.
    		($arbre, $serveur, $param1, $service1) = split(/;/, $liste);	# Parse de chaques lignes de <F> 
     
    		# Condition pour trouver les dependances EVA.
    		if ($param1 eq "DEPEVA") {
    			open ( Fsor, '>> exit.txt');		# Ouvre le fichier de Resultat
    			print Fsor $liste ;					# Imprime les Dependances EVA
    			close ( Fsor );						# Ferme le fichier de Resultat
    		}
    }

  2. #2
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    - Je voudrai faire en sorte que dans le exit.txt, si on ne retrouve pas le champs1 (TUTU) au moins une fois dans le champs2 (TATA ou autre, car peut importe la ligne), le champs1 soir remplacé par le mot "INIT".
    TUTU;TATA;paramétre1;service
    TOTO;TATA;paramétre1;service
    TITI; TUTU;paramétre1;service
    TUTU;TATA;paramétre1;service

    J'ai une question, il faut que l'on retrouve au moins une fois la valeur du champ 1 dans le champ 2 mais le champ 1 est-il toujours le même? qu'est-ce qui définit la valeur à rechercher? Est-elle fixe ou faut-il vérifier que toutes les valeurs possibles pour le champ1 soient présentes dans le champ 2? Je suppose que le serveur dont on donne la dépendance est différent à chaque ligne. Le champ1 a-t'il une valeur unique, est-il différent à chaque fois?

    Ce qui ferait dans ce dernier cas : TUTU ok mais TOTO et TITI ko.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #! /Perl/bin/perl -w
     
    use warnings;
    Je pense que -w signifie déjà que l'on doit utiliser le pragma warnings.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # Declaration des variables
    my ($arbre);
    my ($liste);
    my ($liste1);
    my ($param1);
    my ($serveur);
    my ($service1);
    Les parenthèses sont inutiles.

    Tu peux également tout déclarer sur une seule ligne et dans ce cas, il faut des parenthèses.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ($arbre, $liste, $liste1, $param1, $serveur, $service1);
    Pourquoi ne pas faire la déclaration à l'intérieur de ta 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
    # Declaration des variables
    my $liste1;
     
    # Ouverture des documents à lire
    open (F, 'liste.txt') || die ("Erreur d'ouverture de la liste !") ;
    open (RP, '>> exit.txt');
     
     
    # Boucle de recherche de dependance EVA
    while (my $liste = <F>){
    		# Parse ligne par ligne du fichier liste.
    		my ($arbre, $serveur, $param1, $service1) = split(/;/, $liste);	# Parse de chaques lignes de <F> 
    		
    		# Condition pour trouver les dependances EVA.
    		if ($param1 eq "DEPEVA") {
    			open ( Fsor, '>> exit.txt');		# Ouvre le fichier de Resultat
    			print Fsor $liste ;					# Imprime les Dependances EVA
    			close ( Fsor );						# Ferme le fichier de Resultat
    		}
    }

    Un autre problème

    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
    open (RP, '>> exit.txt');
     
     
    # Boucle de recherche de dependance EVA
    while ($liste=<F>){
    		# Parse ligne par ligne du fichier liste.
    		($arbre, $serveur, $param1, $service1) = split(/;/, $liste);	# Parse de chaques lignes de <F> 
    		
    		# Condition pour trouver les dependances EVA.
    		if ($param1 eq "DEPEVA") {
    			open ( Fsor, '>> exit.txt');		# Ouvre le fichier de Resultat
    			print Fsor $liste ;					# Imprime les Dependances EVA
    			close ( Fsor );						# Ferme le fichier de Resultat
    		}
    }
    Pourquoi ne pas simplement faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    open (RP, '>> exit.txt');
     
     
    # Boucle de recherche de dependance EVA
    while (my $liste = <F>){
                    ...
    		# Condition pour trouver les dependances EVA.
    		if ($param1 eq "DEPEVA") {
    			print RP $liste ;					# Imprime les Dependances EVA			
    		}
    }
     
    close ( RP );

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 43
    Par défaut
    Merci d'avoir répondue aussi vite !!

    - voila une partie de ma sortie EVA qui est OK :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    PS1LIB1HU;EODVES1HU;DEPEVA;OracleOraDn10g_home1TNSListener;OracleServiceDVHU;Oracle DBConsoleDVHU;PSFT E811
    PS1LIB1HU;EOPDES1HU;DEPEVA;OracleHome101TNSListener;OracleServicePDHU;PSFT E811;PSFT E811
    EOPDES1HU;EOPDDS1HU;DEPEVA;MSSQL$JDELOCAL;SQLAgent$JDELOCAL
    EOPDES1HU;EODVDS1HU;DEPEVA;MSSQL$JDELOCAL;SQLAgent$JDELOCAL
    EOPDES1HU;EODVJS1HU;DEPEVA;IBM HTTP Server 1.3.26.2;IBM Websphere Application Server V5-AS_JS_80;IBM HTTP Server 1.3.26.2
    EOPDES1HU;EOPDJS2HU;DEPEVA;IBM HTTP Server 1.3.26.2;IBM Websphere Application Server V5-AS_JS_80;SAWAgent
    EOPDES1HU;EOPDJS1HU;DEPEVA;IBM HTTP Server 1.3.26.2;IBM Websphere Application Server V5-AS_JS_80;SAWAgent
    PS1LIB1HU;DW1LIB1HU;DEPEVA;Oraclehome102TNSListener;OracleServiceDW1HU;OracleServiceDW1AS
    DW1LIB1HU;RS1LIB1HU;DEPEVA;Hummingbird Core Services;Hummingbird Bi Server
    PS1LIB1US;EODVES1US;DEPEVA;OracleOraDn10g_home1TNSListener;OracleServiceDVUS;Oracle DBConsoleDVUS;PSFT E811
    PS1LIB1US;EOPDES1US;DEPEVA;OracleHome101TNSListener;OracleServicePDUS;PSFT E811;PSFT E811
    EOPDES1US;EOPDDS1US;DEPEVA;MSSQL$JDELOCAL;SQLAgent$JDELOCAL
    EOPDES1US;EODVDS1US;DEPEVA;MSSQL$JDELOCAL;SQLAgent$JDELOCAL
    - Faut-il vérifier que toutes les valeurs possibles pour le champ1 soient présentes dans le champ 2?
    Oui.


    Et voilà mon script modifié comme tu me l'a expliqué :

    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
    #! /Perl/bin/perl -w
     
    use strict;
     
    # Declaration des variables
    my ($arbre, $liste, $liste1, $param1, $serveur, $service1);
     
    # Ouverture des documents à lire
    open (F, 'liste.txt') || die ("Erreur d'ouverture de la liste !") ;
    open (RP, '>> exit.txt');
     
    # Boucle de recherche de dependance EVA
    while (my $liste = <F>){
    		# Parse ligne par ligne du fichier liste.
    		my ($arbre, $serveur, $param1, $service1) = split(/;/, $liste);	# Parse de chaques lignes de <F> 
     
    		# Condition pour trouver les dependances EVA.
    		if ($param1 eq "DEPEVA") {
    			print RP $liste ;					# Imprime les Dependances EVA			
    		}
    }
     
    close ( RP );

    TUTU;TATA;paramétre1;service
    TOTO;TATA;paramétre1;service
    TITI; TUTU;paramétre1;service
    TUTU;TATA;paramétre1;service

    ==> TUTU du champs1 devient alors "INIT" mais les autres (TATA, TITI et TUTU du champs2) ne bouge pas.

    Si tu a des question n'hésites surtout pas!

  4. #4
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Dis moi si cela fait bien ce que tu veux

    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
    use warnings;
    use strict;
     
     
    # Ouverture des documents à lire
    open (F, 'liste.txt') || die ("Erreur d'ouverture de la liste !") ;
    open (RP, '>> exit.txt'); # Ouvre le fichier de Resultats
     
    # %h_champ1     	clé : champ1   	valeur : array des $liste contenant ce champ1
    my %h_champ1;
     
    # %h_champ2     	clé : champ2   valeur : 1
    my %h_champ2;
     
    # Boucle de recherche de dependance EVA
    while (my $liste = <F>){
            chomp($liste );				    # enlève le enter de fin de ligne
    	# Parse ligne par ligne du fichier liste.
    	my @a_liste = split(/;/, $liste);	# Parse de chaques lignes de <F> 
    	push (@{$h_champ1{$a_liste[0]}}, $liste);   # $a_liste[0] = $arbre = champ1
    	$h_champ2{$a_liste[1]} = 1;	    # $a_liste[1] = $parametre = champ2
     
    	# Condition pour trouver les dependances EVA.
    	if ($a_liste[2] eq "DEPEVA") {
    		print RP $liste ;       # Imprime les Dependances EVA			
    	}
    }
    close ( RP );	  # Ferme le fichier de Resultats
     
     
    # (keys %h_champ1) liste des clés = liste des valeurs possibles pour champ1
    # not exists $h_champ2{$_} recherche les champs 1 absents dans les champs 2 (clés de %h_champ2)
    # @a_absent : liste des valeurs de champ1 absentes dans les champs2
    my @a_absents = grep{(not exists $h_champ2{$_})} (keys %h_champ1);
     
    # %h_absentes     	clés : champ1 absents    valeurs : 1
    my %h_absents;
    map{$h_absents{$_} = 1;}@a_absents;
     
     
     
    foreach my $champ1 (keys %h_champ1){
    	if(exists $h_absents{$champ1}){		# on vérifie que le champ1 existe bien dans la liste de champ2
    		foreach my $liste ( @{$h_champ1{ $champ1 }}){      # on modifie toutes les lignes contenant ce champ1 (valeurs de  %h_champ1 sont des array)
    			$liste =~ s/^(.*?);/INIT;/;	# champ1 de la liste devient INIT
     
    			print $liste."\n";	 # on affiche $liste modifiée
    		}
    	}
    	else{
    		map{print "$_\n";} @{$h_champ1{ $champ1 }};	# on affiche les $liste non modifiées
    	}
    }

    nb : j'ai supprimé du code $liste1 qui ne servait pas



    Voila ce que j'obtiens

    INIT;EODVES1US;DEPEVA;OracleOraDn10g_home1TNSListener;OracleServiceDVUS;Oracle DBConsoleDVUS;PSFT E811
    INIT;EOPDES1US;DEPEVA;OracleHome101TNSListener;OracleServicePDUS;PSFT E811;PSFT E811
    DW1LIB1HU;RS1LIB1HU;DEPEVA;Hummingbird Core Services;Hummingbird Bi Server
    INIT;EODVES1HU;DEPEVA;OracleOraDn10g_home1TNSListener;OracleServiceDVHU;Oracle DBConsoleDVHU;PSFT E811
    INIT;EOPDES1HU;DEPEVA;OracleHome101TNSListener;OracleServicePDHU;PSFT E811;PSFT E811
    INIT;DW1LIB1HU;DEPEVA;Oraclehome102TNSListener;OracleServiceDW1HU;OracleServiceDW1AS
    EOPDES1US;EOPDDS1US;DEPEVA;MSSQL$JDELOCAL;SQLAgent$JDELOCAL
    EOPDES1US;EODVDS1US;DEPEVA;MSSQL$JDELOCAL;SQLAgent$JDELOCAL
    EOPDES1HU;EOPDDS1HU;DEPEVA;MSSQL$JDELOCAL;SQLAgent$JDELOCAL
    EOPDES1HU;EODVDS1HU;DEPEVA;MSSQL$JDELOCAL;SQLAgent$JDELOCAL
    EOPDES1HU;EODVJS1HU;DEPEVA;IBM HTTP Server 1.3.26.2;IBM Websphere Application Server V5-AS_JS_80;IBM HTTP Server 1.3.26.2
    EOPDES1HU;EOPDJS2HU;DEPEVA;IBM HTTP Server 1.3.26.2;IBM Websphere Application Server V5-AS_JS_80;SAWAgent
    EOPDES1HU;EOPDJS1HU;DEPEVA;IBM HTTP Server 1.3.26.2;IBM Websphere Application Server V5-AS_JS_80;SAWAgent

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 43
    Par défaut
    Quand j'actionne le script, j'ai une sortie sur ma fenêtre cmd et une autre dans le exit.txt

    Celle dans l'invite de commande m'a l'aire correcte, mais celle dans le exit.txt est en une ligne et pas de "INIT".

    Je travail à comprendre le script et je voudrai que ce qui ce trouve dans l'invite aille dans le exit.txt car je veux une liste propre car après je travail dessus, mais je vois pas où je dois modifier le script pour ça... désolé...

    Cependant le reste à l'aire de marcher !!
    Je te remercie beaucoup!

  6. #6
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	# Condition pour trouver les dependances EVA.
    	if ($a_liste[2] eq "DEPEVA") {
    		print RP $liste ;					# Imprime les Dependances EVA			
    	}
    Cette partie écrit dans le fichier de sortie, il te suffit de la supprimer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    foreach my $champ1 (keys %h_champ1){
    	if(exists $h_absents{$champ1}){		# on vérifie que le champ1 existe bien dans la liste de champ2
    		foreach my $liste ( @{$h_champ1{ $champ1 }}){      # on modifie toutes les lignes contenant ce champ1 (valeurs de  %h_champ1 sont des array)
    			$liste =~ s/^(.*?);/INIT;/;	# champ1 de la liste devient INIT
     
    			print $liste."\n";	 # on affiche $liste modifiée
    		}
    	}
    	else{
    		map{print "$_\n";} @{$h_champ1{ $champ1 }};	# on affiche les $liste non modifiées
    	}
    }
    Cette partie écrit en cmd il te suffit de rajouter RP après le print (en n'oubliant pas de placer après cette boucle la fermeture du Filehandle). J'ai remplacer les INIT dans toutes les lignes, ne doit on analyser que les ligne contenant DEPEVA?

  7. #7
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Pour ne tenir compte que des lignes contenant DEPEVA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	if ($a_liste[2] eq "DEPEVA") {
    		push (@{$h_champ1{$a_liste[0]}}, $liste);	# $a_liste[0] = $arbre = champ1
    		$h_champ2{$a_liste[1]} = 1;		
    	}
    Script entier
    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
    use warnings;
    use strict;
     
     
    # Ouverture des documents à lire
    open (F, 'liste.txt') || die ("Erreur d'ouverture de la liste !") ;
     
     
    # %h_champ1     	clé : champ1   	valeur : array des $liste contenant ce champ1
    my %h_champ1;
     
    # %h_champ2     	clé : champ2   valeur : 1
    my %h_champ2;
     
    # Boucle de recherche de dependance EVA
    while (my $liste = <F>){
    	chomp($liste );						# enlève le enter de fin de ligne
    	# Parse ligne par ligne du fichier liste.
    	my @a_liste = split(/;/, $liste);			# Parse de chaques lignes de <F> 
    									# $a_liste[1] = $parametre = champ2
     
    	# Condition pour trouver les dependances EVA.
    	if ($a_liste[2] eq "DEPEVA") {
    		push (@{$h_champ1{$a_liste[0]}}, $liste);	# $a_liste[0] = $arbre = champ1
    		$h_champ2{$a_liste[1]} = 1;		
    	}
    }
    close ( F );							# Ferme le fichier de Resultat
     
     
    # (keys %h_champ1) liste des clés = liste des valeurs possibles pour champ1
    # not exists $h_champ2{$_} recherche les champs 1 absents dans les champs 2 (clés de %h_champ2)
    # @a_absent : liste des valeurs de champ1 absentes dans les champs2
    my @a_absents = grep{(not exists $h_champ2{$_})} (keys %h_champ1);
     
    # %h_absentes     	clé : champ1 absents    valeur : 1
    my %h_absents;
     
    map{$h_absents{$_} = 1;}@a_absents;
     
     
    open (RP, '>> exit.txt'); # Ouvre le fichier de Resultat
    foreach my $champ1 (keys %h_champ1){
    	if(exists $h_absents{$champ1}){					# on vérifie que le champ1 existe bien dans la liste de champ2
    		foreach my $liste ( @{$h_champ1{ $champ1 }}){  # on modifie toutes les lignes contenant ce champ1 (valeurs de  %h_champ1 sont des array)
    			$liste =~ s/^(.*?);/INIT;/;				# champ1 de la liste devient INIT
     
    			print RP $liste."\n";						# on affiche $liste modifiée
    		}
    	}
    	else{
    		map{print RP "$_\n";} @{$h_champ1{ $champ1 }};	# on affiche les $liste non modifiées
    	}
    }
    close ( RP );

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 43
    Par défaut
    En fait, on analyse que les ligne contenant DEPEVA (les dépendance EVA).

    c'est NIKEL, ça fonctionne très bien!!
    ça me sort une liste toute propre !!

    Je te remercie beaucoup pour ta rapidité et ton sérieux!
    Ton script est très bien expliqué et je vais travailler dessus pour mieux comprendre en détaille!

    Encore merci!

  9. #9
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Pour supprimer la valeur DEPEVA
    entree
    EOPDES1US;EODVDS1US;DEPEVA;MSSQL$JDELOCAL;SQLAgent$JDELOCAL

    sortie
    EOPDES1US;EOPDDS1US;MSSQL$JDELOCAL;SQLAgent$JDELOCAL
    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
    open (RP, '>> exit.txt'); # Ouvre le fichier de Resultat
    foreach my $champ1 (keys %h_champ1){
    	if(exists $h_absents{$champ1}){					# on vérifie que le champ1 existe bien dans la liste de champ2
    		foreach my $liste ( @{$h_champ1{ $champ1 }}){  # on modifie toutes les lignes contenant ce champ1 (valeurs de  %h_champ1 sont des array)
    			$liste =~ s/^(.*?);/INIT;/;				# champ1 de la liste devient INIT
    			$liste =~ s/DEPEVA;//;					# suppression du champ 'DEPEVA'
    			print RP $liste."\n";						# on affiche $liste modifiée
    		}
    	}
    	else{
    		foreach my $liste ( @{$h_champ1{ $champ1 }}){  # on modifie toutes les lignes contenant ce champ1 (valeurs de  %h_champ1 sont des array)
    			$liste =~ s/DEPEVA;//;					# suppression du champ 'DEPEVA'
    			print  RP $liste."\n";					# on affiche les $liste non modifiées
    		}	
    	}
    }
    close ( RP );  # ferme le fichier des résultats
    Ravie d'avoir pu t'aider.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 43
    Par défaut
    Sympa ça !!!!

    J'ajoute le petit plus qui fera le tout!!

    Génialissime !!

  11. #11
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Les parenthèses dans mes substitutions sont inutiles, tu peux les supprimer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $liste =~ s/^.*?;/INIT;/;      # champ1 de la liste devient INIT
    $liste =~ s/DEPEVA;//;	       # suppression du champ 'DEPEVA'
    Les parenthèses servent à récupérer des valeurs et les placent dans $1, $2...$n
    Ces 2 substitutions peuvent être écrites en une seule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $liste =~ s/^.*?(;.*)DEPEVA;(.*)$/INIT$1$2/; # champ1 de la liste devient INIT + suppression du champ 'DEPEVA'


    Ton script est très bien expliqué et je vais travailler dessus pour mieux comprendre en détaille!
    N'hésite pas à me poser des questions.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 43
    Par défaut
    Salut,

    J'ai fais les petites modification et en ce qui concerne les parenthèse, je les avais vues

    Sinon je te remercie beaucoup pour ton aides et j'ai compris ton script en intégralité car j'ai pus expliquer à un collègue le pourquoi du comment!

    Je te souhaite une bonne journée et à la prochaine!

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

Discussions similaires

  1. Problème avec la substitution de commandes
    Par essomba84 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 31/10/2011, 19h53
  2. Problème génération des clés de substitution
    Par Haneng dans le forum kettle/PDI
    Réponses: 1
    Dernier message: 30/03/2009, 16h30
  3. problème substitution des balises html
    Par julie31 dans le forum Langage
    Réponses: 2
    Dernier message: 09/03/2009, 23h00
  4. problème de substitution pour perl
    Par claire63 dans le forum Langage
    Réponses: 2
    Dernier message: 17/01/2008, 13h30
  5. problème variable dans substitution par regex
    Par gorgonite dans le forum Langage
    Réponses: 2
    Dernier message: 26/12/2007, 13h31

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