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 :

correction de script perl


Sujet :

Langage Perl

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 32
    Par défaut correction de script perl
    bonjour
    j'ai écrit un script perl qui lit un fichier par lignes et cherche dans un autre fichier s'il ya des caractéres ( lignes complétes) du premier et écrit dans un 3 eme fichier les lignes du 2 eme qui contiennent les caratctéres (lignes) du 1er
    mon script n'écrit rien dans le 3 eme fichier !!!!!!!!!
    mon script :
    #!/usr/bin/perl
    use strict;
    open READ1,"</tel_nontel/non_tel/aids" or die "E/S : $!\n";
    open READ2,"</trainCD/aidsseg" or die "E/S : $!\n";
    open WRITE,">/tel_nontel/non_tel/aids.lst" or die "E/S : $!\n";
    my @f3;
    my @f1 = <READ1>;
    my @f2 = <READ2>;
    for my $val(@f1){
    $val =~ s/\s*\r?\n//;
    push @f3,grep { $_ =~ /$val\)/ } @f2 }
    print WRITE @f3;
    pouvez vous svp m'aider a le corriger

  2. #2
    Jeh
    Jeh est déconnecté
    Membre expérimenté Avatar de Jeh
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Par défaut
    Déjà, ce serait plus propre de fermer tes fichiers...Ensuite d'aérer ton code...
    Comme ça, c'est mieux :
    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
     
    #!/usr/bin/perl
    use strict;
     
    open READ1,"</tel_nontel/non_tel/aids" or die "E/S : $!\n";
    open READ2,"</trainCD/aidsseg" or die "E/S : $!\n";
    open WRITE,">/tel_nontel/non_tel/aids.lst" or die "E/S : $!\n";
     
    my @f1 = <READ1>;
    close READ1;
    my @f2 = <READ2>;
    close READ2;
     
    for my $val(@f1) {
         $val =~ s/\s*\r?\n//;
         print WRITE grep {/$val\)/} @f2;
    }
    close WRITE;
    Sinon, est-il possible que tu es des casses différentes entre tes deux fichiers lus ?

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 32
    Par défaut
    salut
    oui le fichier 1 contient des lignes contenant des paths et le fichier 2 contient tout les paths du fichier 1 avec pleins d'autres.
    le fichier 1 contient 78000 lignes et le fichier 2 contient 90000
    j'ai testé ton script et ca ne donne pas de réponse , bug ,
    merci

  4. #4
    Jeh
    Jeh est déconnecté
    Membre expérimenté Avatar de Jeh
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Par défaut
    En faisant une recherche sur le forum, je suis tombé sur une librairie qui réalise des diff sur fichiers : http://search.cpan.org/~rbs/Text-Diff-0.35/lib/Text/Diff.pm


    Tu devrais peut être regarder de ce côté là pour ne pas trop se prendre la tête...

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 32
    Par défaut
    toujours rien , je ne sais pas pourquoi
    mais je crois que dans ton script il ne retrouve pas les chaine des lignes du fichier 1 (peut etre un espace ou je ne sé koi !!)
    peux tu me proposer autre chose (autre script)
    merci pour ton aide

  6. #6
    Jeh
    Jeh est déconnecté
    Membre expérimenté Avatar de Jeh
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Par défaut
    Citation Envoyé par donmamio
    toujours rien , je ne sais pas pourquoi
    mais je crois que dans ton script il ne retrouve pas les chaine des lignes du fichier 1 (peut etre un espace ou je ne sé koi !!)
    peux tu me proposer autre chose (autre script)
    merci pour ton aide
    Et ça =>
    En faisant une recherche sur le forum, je suis tombé sur une librairie qui réalise des diff sur fichiers : http://search.cpan.org/~rbs/Text-Diff-0.35/lib/Text/Diff.pm


    Tu devrais peut être regarder de ce côté là pour ne pas trop se prendre la tête...
    ???

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 32
    Par défaut
    au fait je n'ai rien compris sur le lien que tu m'as envoyé , je suis nouveau en perl
    je n'arrive pas !!!

  8. #8
    Expert confirmé
    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
    Par défaut
    Personnellement, j'écrirais sans doute cela comme ça :
    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
     
    #!/usr/bin/perl
    use strict; use warnings;
     
    # usage : script fichier1 fichier2 sortie
    # imprime dans sortie les lignes de fichier2 qui 
    # correspondent aux lignes de fichier1
    open my $input1, '<', $ARGV[0]
      or die "Problème pour ouvrir $ARGV[0] : $!\n";
     
    open my $input2, '<', $ARGV[1]
      or die "Problème pour ouvrir $ARGV[1] : $!\n";
     
    open my $duplicated_lines_output, '>', $ARGV[2]
      or die "Problème pour ouvrir $ARGV[2] : $!\n";
     
    # construit une table d'association dont les clés sont 
    # les lignes du fichier1
    my %presents_in_file;
    my @lines_in_input1 = <$input1>;
    @presents_in_file{ @lines_in_input1 } = (1) x @lines_in_input1;
     
    while( my $line = <$input2> ) {
      # si la ligne du fichier2 est une clé de la table d'association, 
      # elle était également dans le fichier1
      print {$duplicated_lines_output} $line 
        if exists $presents_in_file{$line};
    }
     
    close($input1);
    close($input2);
    close($duplicated_lines_output);
    (testé positivement)

    --
    Jedaï

Discussions similaires

  1. Réponses: 7
    Dernier message: 08/07/2004, 14h47
  2. [langage] Script Perl Aide
    Par julfra dans le forum Langage
    Réponses: 7
    Dernier message: 17/05/2004, 09h55
  3. [langage] script perl cmd system
    Par kacedda dans le forum Langage
    Réponses: 4
    Dernier message: 02/05/2003, 09h45
  4. [langage] awk et sed dans script perl
    Par scoti dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2003, 18h26
  5. Réponses: 2
    Dernier message: 11/07/2002, 08h31

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