Perl : Comment lire une ligne precise inscrite dans un fichier ...

Perl : Comment lire une ligne precise inscrite dans un fichier ... - Programmation

Marsh Posté le 28-08-2001 à 12:45:52    

Je cherche à lire la ligne 10 d'un fichier.txt, quelqu'un pourrait il me dire comment faire ?

Reply

Marsh Posté le 28-08-2001 à 12:45:52   

Reply

Marsh Posté le 28-08-2001 à 13:14:50    

arf, j'ai pas mes bibles Perl à portée mais j'ai déjà eu ce cas de figure
 
si par exemple, c'est la ligne 10 que tu veux toper :
 

my @lignes;
my $compteur = 0;
 
open (FILE, "monfichier.txt" ) or die;
while (<FILE> )
{
    do
    {
        push (@lignes, $_);
        ++$compteur;
    } while ($compteur != 10);
    last;
}
 
chomp ($lignes[9]);
print ($lignes[9]);

 
je suis pas sûr pour le last, il te faut juste un truc pour quitter le 1er while et ça devrait aller

Reply

Marsh Posté le 28-08-2001 à 14:47:21    

ben c'est pas encore au point... ce cretin de debugguer me sort :
 
Unrecognized character \xA0 at C:\MesDocuments\thegratos\ping.cgi line 83.
 
la portion de mon script dans les alentours de cette ligne :
 
my @lignes; #ligne 74
my $compteur = 0;
open(B,"/home/thegrato/www/ping.txt" )|| die ;
while (<B> )
{
   do # ligne 83
   {
       push (@lignes, $_);
       ++$compteur;
   } while ($compteur != 10);
   last;
}
chomp ($lignes[9]);
($last_number=$lignes[9])=(~/\/([^a-zA-Z\/]+)\s/);
close (B);
 
print $last_number;
  }
 
j'ai essaye de modifier tout ça mais rien à faire ça veut vraiment rien savoir... quelqu'un aurait il une petite idee ?
 
@+

Reply

Marsh Posté le 28-08-2001 à 15:25:02    

tu as essayé de charger toutes les lignes de ton fichier dans un tableau ?
 
C'est peut être mon last pour quitter le while qui fout sa mouise, je comprend pas trop
 
Sinon, comme je dis, si ton fichier n'est pas énorme en nbre de lignes, tu peux tjs le charger entièrement, c'est pas top top mais bon

Reply

Marsh Posté le 28-08-2001 à 21:59:47    

Bon alors voila mon script
 
$ping = "/bin/ping -c 2";
$url = "ping.cgi";
$title ="Ping de serveur";
 
if ($ENV{'CONTENT_LENGTH'} ne '') {
 
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
     @pairs = split(/&/, $buffer);
     foreach $pair (@pairs)
     {
         ($name, $value) = split(/=/, $pair);
         $value =~ tr/+/ /;
         $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
         $value =~ s/~!/ ~!/g;
         $FORM{$name} = $value;
     }
}
 
$FORM{'host'} =~ s/(\W)/\\$1/g;
 
print "Content-type:text/html\n\n";  
 
print "<HTML>\n <HEAD><TITLE>$title</TITLE></HEAD><BODY BGCOLOR=\"#FFFFFF\" LINK=\"#FFFFFF\" VLINK=\"#FFFFFF\" ALINK=\"#FFFFFF\"> ";
 
     
    if ($FORM{'host'} eq ''){
    print <<EOFHTML;
     
   <FORM METHOD="POST" ACTION="$url">
 
    <TABLE WIDTH="350"  CELLPADDING="0" CELLSPACING="0" BORDER="0">
       <TR ALIGN="CENTER"><TD BGCOLOR="#ffbc2a"> <BR><INPUT TYPE="TEXT" SIZE="18" MAXSIZE="40" NAME="host" VALUE="host.domain.com"><BR> </TD><TD BGCOLOR="#000000"> <BR><INPUT TYPE="SUBMIT" VALUE="CHECK"><BR> </TD></TR></TABLE>
 
EOFHTML
  }
    else
  {
    $txt = `$ping $FORM{'host'}`;
 
open (A,">/home/thegrato/www/ping.txt" ) || die "impossible d'ouvrir le fichier";
print A $txt;
close(A);
 
my @lignes;
my $compteur = 0;
open(B,"ping.txt" )|| die ;
while (<B> )
{
   do
   {
       push (@lignes, $_);
       ++$compteur;
   } while ($compteur != 10);
   last;
}
chomp ($lignes[7]);
($last_number=$lignes[7])=(~/\/([^a-zA-Z\/]+)\s/);
close (B);
 
print $last_number;
  }
 
  print "</BODY></HTML>";
 exit 0;
 
Apparemment le last ne pose pas vraiment probleme... j'ai essaye de retirer le do et/ou le last mais ça change rien au probleme...

Reply

Marsh Posté le 30-08-2001 à 11:03:34    

une question toute bête : pour lancer ton script, utilise-tu l'option -w ?
 
c'est tout con comme truc, tellement con qu'il y a plein de collègues qui ne l'utilisent jamais et bien souvent les messages d'erreur et/ou d'avertissement sont plus explicites que les messages standards

Reply

Sujets relatifs:

Leave a Replay

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