[Perl] pb avec fichier

pb avec fichier [Perl] - Programmation

Marsh Posté le 11-07-2001 à 17:57:07    

voila, j'ai un fichier qui contient des adresses.
Je voudrais parcourir ce fichier mais en même temps comparer chaque ligne à une variable de type string :
 
open (FSOR,'file.txt)
my $motif="www.blabla.com";
my @ligne = <FSOR>;
foreach (@ligne) {
   if ("$_" eq "$motif" ) {
      print "\n <<< $motif >>>";
   }  
}
ce motif existe mais il ne me l'affiche pas donc comment recupére chaque ligne de mon fichier pour être sûre que la comparaison soit valide ?
(www.blabla.com existe dans le fichier , quand je fais une lecture de mon fichier avec $_ je peux le voir)
merci !

Reply

Marsh Posté le 11-07-2001 à 17:57:07   

Reply

Marsh Posté le 11-07-2001 à 23:06:26    

Tu n'as qu'a faire un affichage de ta ligne courante dans ta boucle...
 
sinon fait la ton foreach comme ca :  foreach $CURRENT_LINE (@ligne)  
 
et pour ton motif, recherche dans la ligne les occurences qui peuvent y ressembler de la maniere suivante :
if ( $CURRENT_LINE =~ $motif )
 
peut etre que ca ira mieux :p

Reply

Marsh Posté le 12-07-2001 à 11:36:39    

merci FaNToM !
c'est mon comparateur "eq" qui deconnait
"=~é " marche beaucoup mieux !

Reply

Marsh Posté le 12-07-2001 à 14:25:35    

une autre question :
si j'ai une variable par ex:
$text1="yahoo.com/adv/perl"  
 
et que je veux le comparer  
à un $text2="yahoo.com/adv/"
 
lorsque je fais un truc du style :
if ($text2=~ /^$text1/) {...}
ça ne marche pas !
est-ce que l'expression regulière est bonne ??
ce qui m'interesse c'est le "yahoo.com.adv" du moment que cette partie existe dans ma comparaison alors je rentre dans la condition.
merci

Reply

Marsh Posté le 12-07-2001 à 15:20:42    

^up :)

Reply

Marsh Posté le 12-07-2001 à 20:12:44    

T'aurais pas plutôt intérêt à inverser tes 2 variables:
if ($text1=~ /^$text2/) {...}
 
Paceke tu peux pas trouver (vu ton expression régulière) une chaine plus longue dans une chaine plus courte (si t'as compris koi moi dire).
D'après ton truc, tu cherches si yahoo.com/adv/perl ($text1) apparait dans yahoo.com/adv ($text2)... Ca marchera pas...
Ce ki me semble le mieux:
if ($text1 =~ /^$text2.*$/)

Reply

Marsh Posté le 12-07-2001 à 23:20:52    

jibix >  
 
J'ai un doute sur ton test... je pense que tu devrais plutot comparer ta variable par rapport a la chaine de comp cad faire la chose suivante :
 
if ($text1=~ /^yahoo\.com\/adv\//)  
 
J'ai mit la chaine de comp en dur car je veux mettre en evidence que les / et le . peuvent etre mal interpreter lors du test.
 
Je ne dis pas que ca marche mais je pense au moins que ca peut apporter qqc.


---------------
"C'est pour quand ? Pour quand tu ne t'y attendras pas. Ni avant. Ni après. Alors, fais ta vie. Ca viendra."
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed