Newsgroup: it.comp.os.linux.development
Titolo: Script in perl

Come  faccio in  perl ad  aprie un  file e  a fare  aggiungere una  riga
all'inizio del file?
-- 
Non c'č piů forza nella normalitŕ: c'č solo monotonia.

all'inizio del file?
#!/usr/bin/perl
open MYFILE, "<dati.txt";
@lines = <MYFILE>;
open MYFILE, ">dati.txt";
print MYFILE "nuova linea\n";
print MYFILE @lines;
close MYFILE;

,

perfetto funziona.  Avrei un'altra  domanda: @lines è  un array  con una
riga per  ogni elemento,  giusto? E' possibile  modificare lo  script in
modo che  copi al massimo  le prime 49 righe  dell'array e che  le altre
vengano  automaticamente eliminate  e  non vengano  rescritte nel  nuovo
file?
Ciao e grazie.
-- 
Non c'è più forza nella normalità: c'è solo monotonia.

file?
#!/usr/bin/perl
open MYFILE, "<dati.txt";
@lines = ();
for ($i=1; $i<50; $i++) {
  $lines[$i] = <MYFILE>;
}
open MYFILE, ">dati.txt";
print MYFILE "nuova linea\n";
print MYFILE @lines;
close MYFILE;
--
Marco Cucinato
VdS P.A. S.O.S. Canzo - Lurago d'Erba
Istruttore 
A.N.P.As
.
http://sos.canzo.org
http://www.net1.it/soslurago

Ciao Ottavio Campana,
 > Come  faccio in  perl ad  aprie un  file e  a fare  aggiungere una  riga
 > all'inizio del file?
che io sappia, non c'e' altro modo che creare un nuovo file, mettere la riga
all'inizio, e poi appendere il "vecchio" file, quindi cancellare il vecchio
file e rinominare quello nuovo.
Oppure fai tutto in memoria ma e' un kasino...
-- 
Pa.Ped, Como
http://www.fastflow.it/~paolop
ICQ: 4755831

 writes:
<cut> 
ok, ti rompo le scatole per l'ultima  volta :-) 
Nel form ho  una textarea che viene poi mandata  allo script. Come posso
rimuovere il segno  \M dal testo che  mi manda? Vorrei che  in ogni riga
del file  dati.txt ci  fosse effettivamente una  riga della  tabella che
viene poi  caricata attraverso  php3 in  una pagina  html. Se  rimane il
segno \M la riga in scrittura viene  spezzata su più righe e si incasina
la rimozione delle vecchie righe.
Ciao


 prime 49 righe  dell'array
Potresti provare qualcosa del genere:
#!/usr/bin/perl
open MYFILE, "dati.txt";
@lines = <MYFILE>;
open MYFILE, ">dati.txt";
print MYFILE "nuova linea\n";
$count = 0;
foreach $line (@lines) {
        print MYFILE $line;
        last if ++$count == 49;
}
close MYFILE;
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)

On Sun, 23 Apr 2000 18:14:23 GMT, 
bo...@www.bott.it
 (Ottavio Campana)
wrote:
chop $riga; oppure chomp $riga;
altrimenti 
$riga ~= s/\M//g;

,

non  funziona. Ho  provato  più volte,  ma non  riesco  a togliere  quel
maledetto segno di caporiga. Questo è lo script, spero ti sia più facile
aiutarmi avendo il codice.
#!/usr/bin/perl
print "Content-type:text/html\n\n";
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;
    $FORM{$name} = $value;
}
open MYFILE, "/var/www/
www.bottnet.it/privato/messaggi.txt
";
@lines = ();
for ($i=1; $i<50; $i++) {
        $lines[$i] = <MYFILE>;
}
open MYFILE, ">/var/www/
www.bottnet.it/privato/messaggi.txt
";
$riga = "<tr><td><a href=\"mailto:" . $FORM{email} ."\">" . $FORM{autore} . "</td><td><font color=\"\#a2f080\">" . $FORM{messaggio} . "</font></td></tr>\n";
print MYFILE $riga;
print MYFILE @lines;
close MYFILE;
print "<html>\n<head>\n<title>Messaggio accodato</title>\n</head>\n";
print "<body bgcolor=\"\#000000\"><font color=\"\#a2f080\">\n";
print "<h1 align=\"center\">Messaggio accodato con successo</h1>\n";
print "<p>\n<center>\n<table>";
print "<tr><td><font color=\"\#a2f080\">autore:</font></td>";
print "<td><a href=\"mailto:";
print $FORM{email};
print "\">";
print $FORM{autore};
print "</a></td>";
print "</tr>";
print "<tr><td><font color=\"\#a2f080\">messaggio:</font></td>\n<td><font color=\"\#a2f080\">";
print $FORM{messaggio};
print "</font></td></tr>";
print "</table>\n</center>\n";
print "<p><center><form name=\"chiudi\">\n</font><font color=\"\#000000\">";
print "<input type=\"button\" value=\"Chiudi\" onClick=\"window.close();\">";
print "</form>\n";
print "</font></body>\n</html>";
ho provato a mettere i vare chop chomp  e =~ (~= mi dava errore), ma non
ho ottentuo alcun risultato...


ho ottentuo alcun risultato...
lascia stare... devo aver bevuto qualche bicchiere di troppo di
Soave... chomp e chop tolgono i \n da fine riga... e in effetti ~= e'
un pelo sbagliato :-)
ho appena installato il uo script sul mio pinguino, e ho visto
(hexdump -c) che quei maledetti ^M sono dei \r. quindi, ho aggiunto la
linea nel ciclo che prende i campi da STDIN:
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/\r\n/ /g;
#**************************
    $FORM{$name} = $value;
}
a me cosi' funziona: tutti i ritorni carrello della <textarea> vengono
sostituiti da spazi.
Ciao!

 Come posso rimuovere il segno  \M dal testo che  mi manda? 
Hai provato con
        $linea =~ s/\cM//gm;
?


     $value =~ s/\r\n/ /g;
Si potrebbe usare
      $value =~ tr/+\r\n/ /;


 linea nel ciclo che prende i campi da STDIN:
Eccezionale! funziona! grazie a tutti!!!!
