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 :

recherche de chaine de caractéres


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 32
    Points : 16
    Points
    16
    Par défaut recherche de chaine de caractéres
    bonjour
    j'ai un probléme , je n'arrive pas a écrire un script perl qui ouvre un fichier1 dont les lignes conteniennent differentes chaines de caractére et puis ouvre un autre fichier2 dont chaque ligne contient en partie une chaine de caractéres semblable a celle du fichier 1.et écrire dans un fichier 3 que les lignes contenant ces chaine .
    exemple :

    fichier 1 fichier 2
    AA/DD/c
    ZZ/DD/D
    .............
    fichier 2
    jkggghg AA/DD/c
    azerty OO/OO/PP
    hjfljhff ZZ/DD/D

    jhjhty OO/OO/PP
    kgklhlg BB/GG/BB/BB

    et donc le fichier 3 doit contenir
    jkggghg AA/DD/c
    hjfljhff ZZ/DD/D


    merci pour votre aide

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Points : 208
    Points
    208
    Par défaut
    Salut,

    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
      #! /usr/bin/perl
    use warnings;use strict;
     
    open READ1,"file1" or die "E/S : $!\n";
    open READ2,"file2" or die "E/S : $!\n";
    open WRITE,">file3" or die "E/S : $!\n";
     
    my @f3;
    my @f1 = <READ1>;
    my @f2 = <READ2>;
     
    for my $val(@f1){
      push @f3 ,grep { $_ =~/$val/ } @f2
    }
    print WRITE @f3;
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      #! /usr/bin/perl
    use warnings;use strict;
     
    open READ1,"file1" or die "E/S : $!\n";
    open READ2,"file2" or die "E/S : $!\n";
    open WRITE,">file3" or die "E/S : $!\n";
     
    my @f3;
    my @f1 = <READ1>;
    my @f2 = <READ2>;
    map { our $val = $_ and push @f3,grep { $_ =~ /$val/} @f2 } @f1;
    print WRITE @f3;
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      #! /usr/bin/perl
    use warnings;use strict;
     
    open WRITE,">file3" or die "E/S : $!\n";
     
    my @f3;
    map { our $val = $_ and push @f3,grep { $_ =~ /$val/} `cat file2` } `cat file1`;
    print WRITE @f3;
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      #! /usr/bin/perl
    use warnings;use strict;
     
    open WRITE,">>file3" or die "E/S : $!\n";
     
    map { our $val = $_ and print WRITE grep { $_ =~ /$val/} `cat file2` } `cat file1`;
    lami20j
    --
    lami20j

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    merci pour les scripts
    mais a chaque fois ça me donne un fichier3 vide.
    je n' comprend pas pourquoi, !!
    mon fichier 1 (10000 lignes) contient au fait 1 path dans chaque ligne
    "inter/Thu/wor.hyu_ik.dgs"
    et le fichier 2 contient plusieurs lignes environs 80000 et il a quelques lignes contenant les caractéres de chaque ligne de fichier1.
    les lignes du fichier 2 sont de la forme :
    <s> SIL france-inter ouvre sogner </s> (0700_0800/inter_dgs/19981207_0700_0800.dgs.9)
    <s> SIL france-inter est souvent </s> (inter/Thu/wor.hyu_ik.dgs)
    est donc le fichier 3 dois contenir la ligne 2 du fichier 2

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Points : 208
    Points
    208
    Par défaut
    Salut,

    envoie une petite partie de tes fichiers pour voir (quelque centaines de lignes).

    Ce que j'ai fait j'ai testé sur ton exemple et ça marche.

    lami20j
    --
    lami20j

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    j'ai essayé d'attacher les fichier mais c'est impossible alors voici quelques lignes de fichiers :
    le fichier 1
    19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.1
    19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.3
    19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.4
    19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.5
    19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.6
    19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.7
    19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.9
    19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.10
    le fichier 2
    <s> pa</s>(19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.1)
    <s> o </s> (19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.2)
    <s> f </s> (19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.3)
    <s> l </s> (19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.4)
    <s> s </s> (19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.5)
    <s>yo> (19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.6)
    <s> (19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.7)
    < S (19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.8)<s> ffrhh (19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.9)
    SIL (19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.10)
    > (19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.11)
    <s> s /s> (19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.12)
    SIL de</s>19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.13)
    <s> fr/s> (19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.14)
    deux incendies ont donc fait dix morts cette nuit en région parisienne </s> (19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.15) <s> SIL à livry-gargan SIL en seine-saint-denis SIL le feu a pris dans une maison de retraite SIL située au cent vingt-sept rue émile gérard </s> (19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.16)
    <s> SIL l' incendie s' est déclaré dans une chambre avant de se propager à l' ensemble du bâtiment de trois étages </s> (19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.17)
    <s> SIL sept personnes ont été tuées SIL il y aurait une dizaine de personnes blessées SIL tous les pensionnaires ont été évacués </s> (19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.18)
    tin </s> (19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.19)
    <s> SIL nous n' avons pas plus de détails pour l' instant SIL un de nos reporters est en (19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.20)
    <s> SIL (19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.21)
    ue </s> (19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.22)
    tenu </s> (19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.23)
    feu </s> (19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.24)
    merci pour ton aide

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Points : 208
    Points
    208
    Par défaut
    Salut,

    je crois que j'ai compris pourquoi. tu est sous windows je suppose.

    Cette ligne ce termine avec \r\n donc notre variable $val contient la chaîne + \r\n à la fin (ça c'est dans le 1er fichier)
    donc à la fin de dga.1 tu as \r\n

    19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.1
    Dans le deuxième tu as
    <s> pa</s>(19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.1)
    donc ici à la fin de dga.1 tu as une paranthèse

    Conclusion la ligne de fichier 2 ne correspond pas à $val ce qui est normal, heureusement.

    J'ai corrigé (ce qui ne veut pas dire que tout est fait - je travaille toujours sur des morceaux de tes fichiers ) ça en supprimant \r\n à la fin de chaque ligne de fichier 1.

    En fait j'ai fait un test pour decouvrir ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    {
      local $"=";"; #  ; sera le separateur entre les éléments du @f1
      print "@f1";
    }
    le resultat c'était quelque chose de genre

    19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.1
    ;19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.2
    ;19981207_0700_0800_inter_fm_dga/19981207_0700_0800_inter_fm_dga.3
    Essaie ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #! /usr/bin/perl
    use warnings;use strict;
    open READ1,"file1" or die "E/S : $!\n";
    open READ2,"file2" or die "E/S : $!\n";
    open WRITE,">file3" or die "E/S : $!\n";
    my @f3;
    my @f1 = <READ1>;
    my @f2 = <READ2>;
    for my $val(@f1){
    $val =~ s/\s*\r?\n//;
    #$val =~s/\s*$//;
    push @f3 ,grep { $_ =~ /$val\)/ } @f2 }
    print WRITE @f3;
    lami20j

    P.S. En fait c'est du bidouillage que je n'aime pas trop. Il faut étudier les fichiers (leur provenance, leur structure, ....)
    --
    lami20j

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Points : 208
    Points
    208
    Par défaut
    Salut,
    Citation Envoyé par donmamio
    j'ai essayé d'attacher les fichier mais c'est impossible alors voici quelques lignes de fichiers :
    le fichier 1
    le fichier 2
    merci pour ton aide
    Voici un lien où tu peux joindre des grands fichiers.
    Je pense que c'est mieux d'avoir les fichiers. En travaillant sur des morceaux on risque d'avoir toujours des problèmes. Merci.
    http://beta.yousendit.com/

    lami20j
    --
    lami20j

Discussions similaires

  1. Multiples conditions - recherche de chaines de caractères
    Par nokiariver dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 11/12/2007, 15h17
  2. [Selenium] Rechercher une chaine de caractères dans un textarea
    Par hocinema dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 20/07/2007, 14h56
  3. rechercher une chaine de caractère dans un fichier
    Par 3FHFEB dans le forum Langage
    Réponses: 1
    Dernier message: 26/10/2006, 11h13
  4. Réponses: 9
    Dernier message: 07/09/2006, 13h47
  5. Recherche de chaine de caractères
    Par Surtep dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 26/07/2006, 15h52

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