Newsgroup: it.comp.lang.perl
Titolo: eliminare stringhe vuote da un array

Salve,
finora mi e' sempre bastato adattare per uso personale gli script CGI
presenti in rete, ma ora mi trovo a dovermi fare il mio primo script in
Perl da solo e sono in difficolta' (probabilmente banale, scusatemi),
vorrei chiedervi aiuto in proposito:
Allora, mi apro un file di testo e mi leggo le righe memorizzandole in
un array:
   open (FILE, "$file");
   @lines = <FILE>;
   close FILE;
dopodiche' elimino le righe che non mi interessano (mettiamo che
contengano tutte i caratteri 'xxx'):
   @stringhe = grep (!/xxx/,@lines);
poi elimino i caratteri newline alla fine:
   chomp (@stringhe);
ora mi trovo un array che ha le stringhe che mi interessano piu' alcune
stringhe vuote (le righe vuote presenti nel file di origine e che non ho
eliminato col grep).
  per esempio: @lines = ("riga5","riga6","","riga9","","riga11");
Ho bisogno di eliminare dall'array gli elementi vuoti, cioe' le stringhe
"", in modo che mi rimangano solo le stringhe significative. Come
faccio?
In alternativa, potrei assegnare all'array direttamente le righe non
vuote gia' dall'inizio? Se si', come?
Grazie in anticipo a chi mi rispondera'.
Saluti a tutti
Roberto Trama
--
Posted from 
ro...@www.capri.it
 [194.185.85.66]
via Mailgate.ORG Server - 
http://www.mailgate.org

 vuote gia' dall'inizio? Se si', come?
   open (FILE, "$file");
   @lines = <FILE>;
   close FILE;
   chomp @lines;
   @stringhe = grep { !/xxx/ && length } @lines ; 
Maurizio
-- 
Maurizio M. Munafo' / 
mmmu...@usa.net
"Consider Phlebas, who was once handsome and tall as you" (T.S.Eliot)

faccio?
@stringhe = grep (/./,@lines);
Ciao
Andrea

>   @stringhe = grep { length } @lines;
Se ho capito bene, la funzione lenght restituisce 0 (quindi false)
quando la stringa e' vuota e un valore diverso da 0 (quindi true) quando
contiene caratteri, e cosi' grep si prende solo le righe che soddisfano
la condizione true, cioe' quelle con caratteri, giusto? Oltre che
funzionale mi sembra anche una soluzione elegante, grazie.
Ora pero' ho un altro problema: cerco di testare lo script direttamente
sul server e mi da' un Internal Server Error con la scritta nel log:
"Premature end of script headers"
Lo script e' (essenzialmente) questo:
-------------------------begin script---->
#!/usr/bin/perl
# apre il file con il testo da modificare
$file = "/u/www/mysite/demo/scrolling.txt";
# memorizza le righe del file
open (FILE, "$file");
@lines = <FILE>;
close FILE;
# toglie i caratteri new line
chomp (@lines);
# elimina le righe con i caratteri ^^
# e poi quelle vuote, in modo da
# memorizzare le stringhe significative
@stringhe = grep { !/\^\^/ && length } @lines ;
# una volta memorizzati i titoli del testo
# crea la pagina per modificarli, che mostra
# i campi input riempiti con i titoli preesistenti
print <<"EOM";
Content-type: text/html
<html>
<head><title>Cambia il testo dello Scroller</title></head>
<body bgcolor="#FFFFFF">
	[bla bla]
</body></html>
EOM
-----------------------------end script-----|
Dov'e' che sbaglio?
Grazie e ciao.
Roberto


 close FILE;
 Deve esserci qualche errore nell'esecuzione del programma.
 1) Guarda nel log del server per vedere che errore c'e' scritto
 2) Controlla sempre se la open() riesce, con qualcosa tipo 
  open() or die "...";
 
  [ Occhio che se 'muori' semplicemente il messaggio va ancora al browser e
    ottieni ancora l'errore "Premature end..."]


 scritta nel log: "Premature end of script headers"
1. Testa da command line lo script con 'perl -cw <nomescript>'
2. Usa il modulo CGI::Carp;
   #!/usr/bin/perl
   use CGI::Carp qw(fatalsToBrowser);
--
Alessio F. Bragadini		
ale...@dsnet.it