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 :

Substitution de chaines


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    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
    Par défaut Substitution de chaines
    Bonjour,

    J'ai un code perl qui me recupère des lignes.

    cependant je souhaiterai garder seulement ce qui se trouve en guillemets.

    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
    55
    # !usr/bin/perl -w
    use strict;
    use warnings;
     
    my $cpt = 0;
    my $i = 0;
     
    my $l ="";
     
    my @liste =();
    my @tab =([0]); # Tableau des Functions Filtre avec les propriétés
    my $tab_ligne = 0; # Compteur des Functions Filtre
     
    print "Debut du traitement\n\n";
     
    open FICHIER, '<', "test.apt" or die("E/S : $!\n");
     
    my @bloc = ();
    while ( my $ligne = <FICHIER> ) {
    	if (($ligne =~ /^\t*Left/) || ($ligne =~ /^\t*Top/) || ($ligne =~ /^\t*Width/) || ($ligne =~ /^\t*Height/)){
    		# ne rien faire
    	}
    	else{
    		# cherche la présence d'un bloc
    		my $in_bloc = ($ligne =~ m/\"/) .. ($ligne =~ m{\w+\"}); # cherche la présence d'un bloc
    		push @bloc, $ligne if $in_bloc; # Si l'on est dans un bloc, on remplit la table avec le nouvelle ligne
     
    		if ($in_bloc =~ /E0/) { # Si l'on a trouvé le tag de fin, on traite le bloc, traitement du bloc
    			# print "---- START IF----\n\n";
    			# pop @bloc; # Supprimer la dernière ligne du dernier bloc
    			push @bloc, ""; # concatene une valeur avec une valeur "rien" pour que le tableau soit rempli
     
    			$tab[$tab_ligne][$i] = join "", @bloc;
    			$tab[$tab_ligne][$i] =~ s/\t*//g;
    			$tab[$tab_ligne][$i] =~ s/*"//g;
    			# $tab[$tab_ligne][1] =~ s/\"//g;
     
    			# print $tab[$tab_ligne][$i];
     
    			@bloc = (); # Passer au bloc suivant
    			$i++;
    			$cpt++;
    			# print "\n\n---- THE END IF----";
    		}
    	}
    }
     
    for ($i=0; $i<$cpt; $i++){
    	print $tab[$tab_ligne][$i];
    }
    print $cpt;
     
    close FICHIER;
    print "\n";
    print "\nFin du traitement";
    Mon fichier en entrée :
    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
    .enddata
    			Visible? Yes
    			Left: 4.15"
    			Top: 1.885"
    			Width:  3.8"
    			Height: 2.073"
    		"1-Fully Qualified" External References? No
    		Reject "2-Multiple Window" Instances? Yes
    		Enable Runtime "3-Checks Of 
    		External References"? No
    		Use Release 4.0 Scope Rules? No
    		Edit Fields Read Only On Disable? No
    	Libraries
    				Visible? Yes
    				Left: 4.15"
    Top: 1.885"
    Width:  3.8"
    Height: 2.073"
    	Global "4-Declarations"
    		Window Defaults
    			Tool Bar
    				Title: F&onction
    				Menu Item: &Nouveau
    				Status Text: Créé un nouveau document
    				Background Text: Filtre
    				Display Style? Etched
    				Font Name: "5-System Default"
    				Font Size: "6-System Default2"
    ce que j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    "1-Fully Qualified" External References? No
    Reject "2-Multiple Window" Instances? Yes
    Enable Runtime "3-Checks Of
    External References"? No
    Global "4-Declarations"
    Font Name: "5-System Default"
    Font Size: "6-System Default2"
    ce que je voudrai obtenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    1-Fully Qualified
    2-Multiple Window
    3-Checks Of
    External References
    4-Declarations
    5-System Default
    6-System Default2
    Avez vous une idée ?
    Je pense qu'il faudrait substituer mon résultat mais je ne sais pas comment, avec quelque chose comme : $tab[$tab_ligne][1] =~ s/expression regulière//g;

    Merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Pour tous les cas où la chaîne entre guillemets est entièrement sur la même ligne, le code suivant affichera pour chaque ligne la partie entre guillemets:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "$1\n" if $line =~ /"([^"]+)"/;
    Quand la chaîne entre guillemets est sur plusieurs lignes, il va falloir coder quelque chose de plus complexe exigeant de mieux connaître les cas de figure susceptibles de se présenter (il faut distinguer les mesures en pouces des cas on on a une chaîne multi-ligne entre guillemets).

  3. #3
    Membre éclairé
    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
    Par défaut
    Merci Lola78,

    j'ai modifié ce que tu m'as donné avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "$1\n" if $tab[$i][1] =~ /"([^"]+)"/; # le code suivant affichera pour chaque ligne la partie entre guillemets
    et ça marche sur plusieurs ligne du coup !!!

    J'ai justement crée un autre topic parce que je pense que mon code n'est pas optimisé et pas terrible pour poursuivre ...
    Je suis perdu la, si tu as une idée pour l'autre topic hésite pas

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

Discussions similaires

  1. Substitution de chaine
    Par Rochester dans le forum Langage
    Réponses: 4
    Dernier message: 08/08/2011, 16h05
  2. FOR /F, FINDSTR, variable temporaire, et substitution de chaine
    Par abdelhamidem dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 09/03/2009, 11h35
  3. [AWK] Substitution de chaine
    Par MarLOne dans le forum Linux
    Réponses: 9
    Dernier message: 18/07/2007, 12h40
  4. Substitution de chaine de caractères
    Par bdkiller dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 13/09/2005, 14h01
  5. [langage] substitution chaine
    Par sati dans le forum Langage
    Réponses: 4
    Dernier message: 11/12/2002, 10h01

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