Newsgroup: it.comp.lang.perl
Titolo: come faccio a leggere tutti i file?

Sto scrivendo uno stupidissimo programmino che legge un file e ne modifica
il contenuto secondo alcune mie esigenze.
Al momento il programmino mi chiede il nome del file per leggerlo e poi
sputare fuori un altro file modificato.
Io avrei da modificare così qualche decina (se non centinaio) di files,
quindi mi chiedevo se esistesse un modo in perl per fare aprire tutti i file
che esistono in una directory per poi modificarli e salvarli.
Il fatto è che vorrei che aprisse solo se i file esistono perchè se con il
file handler apro un file inesistente lui lo crea e legge poi un file
vuoto...
Come fo?
grazie
dawe
--------------------------------
Inviato via 
http://usenet.libero.it

 Come fo?
Apri la directory $dir_name :
	opendir(TEMPDIR, $dir_name) || die "Cannot open the folder";
	my @files = readdir(TEMPDIR);
	closedir (TEMPDIR);
e scandisci i files @files con un ciclo "for" o "while" a tuo piacimento.
 Raffaello

 	closedir (TEMPDIR);
Meglio fare:
  opendir(TEMPDIR, $dir_name) || die "Cannot open the folder";
  my @files = grep grep !/^\./ && -f "$dir_name/$_", readdir(TEMPDIR); 	
  closedir (TEMPDIR);
readdir restituisce un'array "filtrato" con grep.
In questo casoprendo tutti i file che:
1 - 	!/^\./ - Non iniziano con il punto (quindi sotto win: . .. non
	vengono presi, sotto linux non vengono presi . .. e i file 
	"nascosti"
2 -	-f "$dir_name/$_" - Mi accerto che siano file, non cartelle o
	link.
3 -	etc - Si possono fare tutti i filtri e controlli che si
	vogliono.
Ciao,
-- 
+--------+ ASCII ribbon campaign ( )
|  kral  |  - against HTML email  X 
+--------+              & vCards / \

 ha scritto nel messaggio
news:20030623142235.00...@paranoici.org...

non per sminuire le vostre rispostema chiamare il programma con:
programma.pl
 *.ext
dove ext e' l'estensione del tipo che mi interessa, male che vada *.*
e poi all'interno rachiudere il programma in un
foreach $file (@ARGS){
    fai_quello_che_facevi_prima_con_un_singolo_$file()
}
ciao,
Nids
ps: volendo si puo' associare il foreach con un if per testare che $file sia
un file e non una dir o altro

}
Se ti riesce di farlo funzionare in Windows....
Comunque, è @ARGV.
Ciao.

 
programma.pl
 *.ext
Non ho tempo per controllare, ma sono *quasi* sicuro che così non
funzioni.
Aspetto smentite. (altrimenti per un tot di tempo ho usato un'metodo
inutile).


Ammissione di colapa: sotto Win la mia proposta non va...
ma si puo' fare
foreach $file (glob(@ARGV[0])){
    fai_quello_che_volevi_fare_prima_con_$file();
}
************************************************
eg:
pippo.pl
:
foreach $file (glob($ARGV[0]))
{
    print $file."\n";
}
output di shell:
C:\Documents and Settings\nids\Desktop\pippo>dir
 Il volume nell'unità C non ha etichetta.
 Numero di serie del volume: 9003-6946
 Directory di C:\Documents and Settings\nids\Desktop\pippo
24/06/2003  14.10    <DIR>          .
24/06/2003  14.10    <DIR>          ..
19/06/2003  23.57           483.794 25133.gif
24/06/2003  14.12                53 
pippo.pl
22/06/2003  23.34           247.714 PNSE.pdf
23/06/2003  09.01           801.880 use.pdf
               4 File      1.533.441 byte
               2 Directory  16.117.792.768 byte disponibili
C:\Documents and Settings\nids\Desktop\pippo>
pippo.pl
 *.gif
25133.gif
C:\Documents and Settings\nids\Desktop\pippo>
pippo.pl
 *.pdf
PNSE.pdf
use.pdf
Ciao,
Nids

     print $file."\n";
Preferisco continuare ad usare il mio accrocchio, :). Tnx.


 ha scritto nel messaggio
news:hlXJa.134117$pR3.3...@news1.tin.it...

Aggiungo:
Sotto Linux andava benissimo "
programma.pl
 *.ext" in quanto prima la shell
espande e poi passa al programma gli argomenti; sotto win invece chiama il
programma e gli passa la stringa degli "ARGV" nuda e cruda
ciao,
Nids

programma e gli passa la stringa degli "ARGV" nuda e cruda
Infatti il problema è esclusivamente il comprtamento della shell: basta
procurarsi bash e funziona benissimo anche in Windows. Mentre però la
presenza di bash in Linux è scontata, così non è per Windows, sicché alla
fine conviene arrendersi e cercare un altro modo (che, per fortuna, in perl
è anche molto facile trovare). Questa almeno la mia opinione.
Ciao.