Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1392 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  [perl] est ce correct ??

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[perl] est ce correct ??

n°712730
Tomate
Posté le 30-04-2004 à 12:44:36  profilanswer
 

salut,
 
alors je vous explique mon pb
 
j ai 2 fichiers, file1 et file2 qui contiennent chacun des numeros (numeros de 10 chiffres/ligne)
j aimerai connaitre les numeros qui sont dans file1 ET PAS dans files2 :D
 
j ai fait ca :
 

Code :
  1. #! /usr/bin/perl
  2. open(ESU, 'list_esu') || die "impossible";
  3. open(TRM, 'list_trm') || die "impossible";
  4. while ($line = <ESU> )
  5. {
  6.     $res = grep $line, <TRM>;
  7.     if ($res)
  8.     {
  9.         print $line;
  10.     }
  11. }


 
mais je ne suis pas tres sur du resultat ue ca sort (en l occurence 1 seul numero sachant que les fichier font 3 et 10Mo :D)
 
 
voilou


---------------
:: Light is Right ::
mood
Publicité
Posté le 30-04-2004 à 12:44:36  profilanswer
 

n°712812
pospos
Posté le 30-04-2004 à 14:43:03  profilanswer
 

ton grep va lire tout le fichier la premiere fois qu'il va être appelé, et ensuite il ne sortira plus rien puisqu'il aura atteind al fin du fichier.
 
il te faut faire:

Code :
  1. #! /usr/bin/perl
  2.   use strict;
  3.   open(ESU, 'list_esu') || die "impossible";
  4.   open(TRM, 'list_trm') || die "impossible";
  5.  
  6.   my %existe_TRM = map {$_ => 1} <TRM>;
  7.   while ($line = <ESU> ) {
  8.         if (not exists $existe_TRM{$line}) {
  9.               # pas dans ce fichier
  10.               print $line;
  11.         }
  12.   }


 
 
ou alors:
 

Code :
  1. open...
  2. my $TRM = join("|", <TRM> );
  3. print grep {!/$TRM/o} <ESU>;


(non testé...)

n°712813
Tomate
Posté le 30-04-2004 à 14:44:04  profilanswer
 

je teste merci ;)


---------------
:: Light is Right ::
n°712825
Tomate
Posté le 30-04-2004 à 14:59:19  profilanswer
 

pospos a écrit :

ton grep va lire tout le fichier la premiere fois qu'il va être appelé, et ensuite il ne sortira plus rien puisqu'il aura atteind al fin du fichier.
 
il te faut faire:

Code :
  1. #! /usr/bin/perl
  2.   use strict;
  3.   open(ESU, 'list_esu') || die "impossible";
  4.   open(TRM, 'list_trm') || die "impossible";
  5.  
  6.   my %existe_TRM = map {$_ => 1} <TRM>;
  7.   while ($line = <ESU> ) {
  8.         if (not exists $existe_TRM{$line}) {
  9.               # pas dans ce fichier
  10.               print $line;
  11.         }
  12.   }


 
 
ou alors:
 

Code :
  1. open...
  2. my $TRM = join("|", <TRM> );
  3. print grep {!/$TRM/o} <ESU>;


(non testé...)


 
 

tomate@gate:~/taf$ ./test.pl
Global symbol "$line" requires explicit package name at ./test.pl line 9.
Global symbol "$line" requires explicit package name at ./test.pl line 11.
Global symbol "$line" requires explicit package name at ./test.pl line 13.
Execution of ./test.pl aborted due to compilation errors.


 
:/


---------------
:: Light is Right ::
n°712827
Tomate
Posté le 30-04-2004 à 15:01:24  profilanswer
 

bon ct a cause du use strict ;)
mais ca me sort tous les numeros :/


---------------
:: Light is Right ::
n°712846
anapajari
s/travail/glanding on hfr/gs;
Posté le 30-04-2004 à 15:16:00  profilanswer
 

Code :
  1. tomate@gate:~/taf$ ./test.pl
  2. Global symbol "$line" requires explicit package name at ./test.pl line 9.
  3. Global symbol "$line" requires explicit package name at ./test.pl line 11.
  4. Global symbol "$line" requires explicit package name at ./test.pl line 13.
  5. Execution of ./test.pl aborted due to compilation errors.


c'est pas a cause du "use strict" c'est à cause du "je code comme un cochon je déclare pas mes variables"
et si ça sort tout c'est peut-être que les deux fichiers ont été inversés...


Message édité par anapajari le 30-04-2004 à 15:16:24
n°712858
Tomate
Posté le 30-04-2004 à 15:24:42  profilanswer
 

anapajari a écrit :

Code :
  1. tomate@gate:~/taf$ ./test.pl
  2. Global symbol "$line" requires explicit package name at ./test.pl line 9.
  3. Global symbol "$line" requires explicit package name at ./test.pl line 11.
  4. Global symbol "$line" requires explicit package name at ./test.pl line 13.
  5. Execution of ./test.pl aborted due to compilation errors.


c'est pas a cause du "use strict" c'est à cause du "je code comme un cochon je déclare pas mes variables"
et si ça sort tout c'est peut-être que les deux fichiers ont été inversés...


nan mais c est pas grave je vais le faire a la porc en shell :D
 
c est un truc qui sera lancé une seule fois donc si ca prend 10h je m en fou :D
 
merci kan meme en tout cas ;)


---------------
:: Light is Right ::
n°713658
matafan
Posté le 01-05-2004 à 18:22:32  profilanswer
 

!/usr/bin/perl -w
 
use strict;
 
my ($f1, $f2) = @ARGV;
my %ref;
 
unless ($#ARGV == 1 && $f1 && $f2) {
        print STDERR "Usage: pl <f1> <f2>\n";
        exit 1;
}
 
open(FILE, $f2) or die "Cannot open file $f2: $!";
map { $ref{$_} = 1 } <FILE>;
close(FILE);
 
open(FILE, $f1) or die "Cannot open file $f1: $!";
map { print unless $ref{$_} } <FILE>;
close(FILE);

n°713685
Tomate
Posté le 01-05-2004 à 19:46:20  profilanswer
 

ca marche pas :/ (ca sort tous les numeros)


Message édité par Tomate le 01-05-2004 à 19:49:10

---------------
:: Light is Right ::
n°713751
matafan
Posté le 01-05-2004 à 22:53:55  profilanswer
 

/home/nicolas/tmp% cat f1
1978
1976
1950
1951
/home/nicolas/tmp% cat f2
1976
1978
/home/nicolas/tmp% ./pl f1 f2
1950
1951


C'est pas ce que tu veux ?


Message édité par matafan le 01-05-2004 à 22:54:20

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  [perl] est ce correct ??

 

Sujets relatifs
interfacer du perl en c++[Perl] Besoin d'un ti coup de pouce pour une regexp
Pb perl[perl] Faire une page d'attente en CGI
perl et linuxperl et df
[PERL] supprimer un caractere d'une chainessh et perl
[Perl] Aide pour logique en POO[Perl] Arrêter un programme proprement lors d'un Ctrl + C
Plus de sujets relatifs à : [perl] est ce correct ??


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR