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 :

chercher une chaine de caracteres et affichage


Sujet :

Langage Perl

  1. #1
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut chercher une chaine de caracteres et affichage
    Bonjour à tous
    Je decris mon probleme :
    j'ai un sous chaine de caractree "xx" que j'extrais a partir d'un fichier fich1 ,
    J'aimerai savoir comment faire pour chercher cette cous chaine dans un fichier fich2 et afficher tout la ligne que contient cette sous chaine.
    Sachant que mon probleme cest :
    si jai cette sous chaine : of the ->"
    jaime pas quil afiche la ligne qui contient
    "and of the ->"
    :/

    MErci d'avance

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 31
    Points : 50
    Points
    50
    Par défaut
    Coucou, je suis pas sûr d'avoir tout compris mais voici une proposition qui t'aidera peut être.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    my $file = "path/fich2.txt";
    my $substring = "xx";
     
    open(FILE, $file);
    while( <FILE> ){
      if( $_ =~ m/$substring/ ){
        $_ =~ s/(.*)and of the \->(.*)/$1$2/g if( $_ =~ m/of the \->/ );
        print $_;
      }
    }
    close(FILE);
    @++

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    J'imagine que "xx" est une exemple littéral, mais qu'en réalité, c'est une valeur extraite d'un fichier, et est donc variable.

    Pour anticiper sur ce point, j'aurais tendance à modifier le script proposé par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $substring = quotemeta("xx");
    Ainsi, il est facile de remplacer "xx" par n'importe quelle variable scalaire, et la regexp fonctionnera toujours correctement.

    A la place d'une recherche par regexp du motif "xx", on peut aussi utiliser la fonction index (et dans ce cas, on doit se passer que quotemeta également).

  4. #4
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Je pense que c'est mieux de charger tout le second fichier dans une table de hachage, comme ca sera plus efficace.. pas la peine de refaire à chaque fois le passage de fichier...

  5. #5
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    J'imagine que "xx" est une exemple littéral, mais qu'en réalité, c'est une valeur extraite d'un fichier, et est donc variable.

    Pour anticiper sur ce point, j'aurais tendance à modifier le script proposé par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $substring = quotemeta("xx");
    Ainsi, il est facile de remplacer "xx" par n'importe quelle variable scalaire, et la regexp fonctionnera toujours correctement.

    A la place d'une recherche par regexp du motif "xx", on peut aussi utiliser la fonction index (et dans ce cas, on doit se passer que quotemeta également).
    Merci Philou67430 pour votre reponse,
    En fait oui, vous avez raison, "xx" ce n'est qu'un exemple
    mais en realité j'ai un fichier de texte sous cette forme :
    de+la -> of (0.069487)

    J'aimerai extraine la chaine de caractere qui se trouve à gauche de la fleche qui est ici "de+la"
    avez vous une piste qui m'aidera à extraire ces sous chaine?
    MErci

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Oui, bien sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    open my $FIC1, "<", "fic1.txt" or die "Can't open fic1.txt: $!";
    while (<$FIC1>) {
      if (my ($substring) = /^(.*?)\s*->\s*of/) {
        # traiter $substring
      }
    }

  7. #7
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Oui, bien sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    open my $FIC1, "<", "fic1.txt" or die "Can't open fic1.txt: $!";
    while (<$FIC1>) {
      if (my ($substring) = /^(.*?)\s*->\s*of/) {
        # traiter $substring
      }
    }
    Merci philou,
    Mais c'est pas toujours qu'il ya le "of"
    je veux juste la chaine avant la "->"
    Merci

  8. #8
    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
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Alors quelque chose comme cela, sans doute:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (my ($substring) =~ /^(.*?)\->/) { # ...
    qui devrait capturer dans $1 ce qui précède le premier "->".

    A toi de virer les espaces inutiles le cas échéant.

  9. #9
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Alors quelque chose comme cela, sans doute:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (my ($substring) =~ /^(.*?)\->/) { # ...
    qui devrait capturer dans $1 ce qui précède le premier "->".

    A toi de virer les espaces inutiles le cas échéant.
    En fait, cette expression capture directement dans $substring (ce qui est tout son intérêt)

  10. #10
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut Probleme resolu!
    Merci beaucoup pour vos reponses
    Probleme resolu!

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

Discussions similaires

  1. chercher une chaine de caracteres et remplacement
    Par étoile de mer dans le forum Langage
    Réponses: 126
    Dernier message: 13/05/2013, 18h16
  2. Chercher une chaine de caractere avec inconnus
    Par linked dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 24/05/2010, 02h06
  3. Chercher une chaine de caracteres dans toute ma base
    Par miltonis dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/09/2007, 17h33
  4. Chercher une parenthese dans une chaine de caracteres
    Par timoth dans le forum VBA Access
    Réponses: 3
    Dernier message: 30/07/2007, 08h50
  5. comment chercher une chaine de caractere
    Par phpaide dans le forum Langage
    Réponses: 2
    Dernier message: 30/05/2006, 12h12

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