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 :

Extraire chaine de caractère dans chaîne de caratère


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Extraire chaine de caractère dans chaîne de caratère
    Bonjour !
    Je suis en débutant en Perl et je n'arrive pas à trouver d'aide sur le traitement des chaines de caractère... (expression régulière ?)

    J'ai un fichier txt en entré de mon prog avec des lignes comme ça:

    host('fr100tf2c4nds53','usf').
    host('DT1_blc04sw02','dt1_lan').
    host('MIC_TUZ-SS1100-IRODA-FA','mic_lan').

    J'aimerai récupérer les données entre le "_" et le ' , pour en faire un fichier CSV, exemple :
    host('DT1_blc04sw02','dt1_lan')
    =>
    DT1;blc04sw02
    seulement pour les lignes qui contiennent DT1 et dt1_lan dans la ligne... oui je sais je sais un peu compliqué... Un dieu des expresions régulière pourrait il m'aider ??

    Merci beaucoup !

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

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    je n'arrive pas à trouver d'aide sur le traitement des chaines de caractère... (expression régulière ?)
    http://www.dil.univ-mrs.fr/~chris/Perl/Regex.htm

    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
    #!/usr/local/bin/perl
     
    use strict;
    use warnings;
     
    my $InFile = "P:/Perl/scripts/Files/host.txt";
    open (InFile,"$InFile") or die "Can't open file\n";
    my $Ligne;
     
     
    while ($Ligne=<InFile>)
    {
            if($Ligne=~ /(DT1)_(.*)','dt1_lan/)
            {
                    print $1."\t".$2."\n";
            }       
    }
     
     
    close;

    Jasmine,
    -- Jasmine --

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Génial Merci Jasmine pour ton aide !!!

    Et en plus ça marche ! Merci encore

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

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    De rien, si tu n'as plus de questions, n'oublie pas de clore ce sujet.
    Si tu n'as que des chiffres et des lettres à récupérer tu peux remplacer le (.*) par (\w*) ça sera plus sélectif.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($Ligne=~ /(DT1)_(\w*)','dt1_lan/)

    Jasmine,
    -- Jasmine --

  5. #5
    Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut la problème a évolué
    salut,

    Je me suis documenter sur les exp régulière, mais j'y arrive pas c'est trop dur... Jasmine m'a beaucoup aidée déja et la solution proposée est presque bonne, mais mon cahier des charges a évolué...
    Je cherche donc a récupérer les infos suivantes (en rouge) seulement pour les lignes contenant la sous chaine dt1_lan:

    host('DT1_blc04sw02','dt1_lan')
    host('TOT_tototo','dt1_lan')
    host('TAT_tatatata','dt1_lan')
    host('fr100tf2c4nds53','usf').
    host('TIC_blc04sw02','dt1_lan').
    host('MIC_TUZ-SS1100-IRODA-FA','mic_lan').

    La solution proposée pas Jasmine (merci encore) est presque bonne sauf que lles 3 caractères avant le "_" ne sont pas les mêmes... Quelqu'un pourrait il m'aider ?
    La solution serait peut etre d'extraire le texte contenue entre les 2 premiers ' ' et ensuite de faire un split avec le caractère _ comme séparateur nan ?

    merci par avance

  6. #6
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($Ligne=~ /(\w{3})_(\w*)','dt1_lan/)
    Essaie tout de même d'apprendre les regexs, ce n'est pas si dur...

    --
    Jedaï

  7. #7
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Pour info, après le code de jedai, les 3 lettres en majuscule seront dans $1 et ce qui est après le tiret sera dans $2.

    Comme dis Jedai, essaye d'apprendre. Il y a de très bon cours, notamment dans le cours de Sylvain Lhullier. La FAQ Perl contient aussi pas mal d'infos...
    "En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
    Application :

    ainsi qu'à regarder la avant de poser une question.

    La rubrique Perl recrute, contactez-moi.

  8. #8
    Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut merci
    Ok merci beaucoup !
    J'avais pas vu la possibilité de sélectionner les caractères précèdents avec les accolades.

    Merci beaucoup !

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 62
    Points : 41
    Points
    41
    Par défaut
    question par rapport au regex:

    est-ce que dans le meme cason peut également faire

    if($Ligne=~ /(\w+)_(\w*)','dt1_lan/) ??

  10. #10
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par glouffy6
    question par rapport au regex:

    est-ce que dans le meme cason peut également faire

    if($Ligne=~ /(\w+)_(\w*)','dt1_lan/) ??
    Oui, mais on n'impose plus que le nombre de caractères reconnus avant le "_" fasse 3 caractères, simplement plus d'un. Nous ne pouvons pas juger de ce qui te convient aussi bien que toi, car nous n'avons pas les mêmes éléments que toi.

    --
    Jedaï

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 04/10/2011, 14h58
  2. extraire une chaine de caractère dans un cdata
    Par arnoldlayne dans le forum XSL/XSLT/XPATH
    Réponses: 0
    Dernier message: 11/03/2010, 10h09
  3. Extraire des chaines de caractères dans un fichier
    Par cycy75 dans le forum Scripts/Batch
    Réponses: 16
    Dernier message: 27/03/2009, 14h56
  4. recherche d'une chaine de caractère dans une données text
    Par jdeheul dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 17/06/2004, 16h35
  5. chaines de caractères dans fichier .rc ou .res
    Par raggadoll dans le forum C++Builder
    Réponses: 5
    Dernier message: 22/03/2004, 15h19

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