PATH DEL FILE
Bisogna fare molta attenzione al path del file da aprire. Per non sbagliare
converrebbe passare sempre il path assoluto del file.
Se si passa invece solo il nome, senza il path completo bisogna essere sicuri che
il file cercato si trovi nella directory corrente, da cui è lanciato il programma.
Se ad esempio lanciamo il programma da un’altra directory (facendo cd .. ci
spostiamo alla directory superiore) ecco che il comando di open fallisce non
trovando il file nella directory corrente (/home/nicola/
Addirittura
fallisce
anche
la
richiesta
di
esecuzione
del
programma, che non viene trovato
nella directory /home/nicola
BIOINFO3 - Lezione 27
1
TEST SUI FILE
In un programma Perl si possono fare
direttamente dei semplici test sui file, ad
esempio per verificarne l’esistenza o il tipo. Si
può inserire il test in una istruzione if per
aprire il file solo se questo esiste
-e filename
Vero se il file di nome ‘filename’ esiste
-d filename
Vero se il file di nome ‘filename’ è una
directory
-z filename
Vero se il file di nome ‘filename’ è vuoto
(dimensione 0)
-s filename
Restituisce la dimensione del file di nome
‘filename’
-r filename
Vero se il file di nome ‘filename’ è leggibile
-w filename
Vero se il file di nome ‘filename’ è scrivibile
BIOINFO3 - Lezione 27
2
DIRECTORY
Le directory sono dei file che contengono nomi di file. In pratica possiamo
pensarle come dei contenitori di file. Perl permette di aprire e leggere una
directory in modo simile a quanto avviene per i file
opendir(HANDLE,nome-directory)
Apre la directory specificata, associandola ad un HANDLE
readdir (HANDLE)
Ogni volta che viene chiamata, questa funzione restituisce il nome del file
successivo nella directory. Restituisce FALSO quando ha esaurito l’elenco dei
file
.
..
prova.pl
test.pl
array.pl
BIOINFO3 - Lezione 27
3
DIRECTORY
Esempio. Stampare il nome dei file di una
directory letta da input
Esempio esecuzione
PRIMO CICLO
$d=<>=“frerfref\n”
$d=“frerfref”
-e $d = -e “frerfref” FALSO
print “file inesistente”
SECONDO CICLO
$d=<>=“numeri\n”
$d=“numeri”
-e $d = -e “numeri” VERO
-d $d = -d “numeri” FALSO
print “non directory”
BIOINFO3 - Lezione 27
4
DIRECTORY
TERZO CICLO
$d==<>=“bioinfo3\n”
$d=“bioinfo3”
-e $d = -e “bioinfo3” VERO
-d $d = -d “bioinfo3” VERO
print “la dir. contiene”
Con la opendir D diventa
una handle per la directory
“bioinfo3”.
Quindi si inizia a ciclare su
tutti i file della directory
Ad ogni ciclo $f riceve dalla
funzione readdir il nome di
un file della directory, che
viene stampato.
Notare che anche i file “.” e
“..” sono ricevuti
BIOINFO3 - Lezione 27
5
OPERAZIONI SU FILE
Perl offre anche delle funzioni equivalenti ai comandi di sistema UNIX relativi
alla gestione dei file (creazione e cancellazione di directory, cancellazione di
file, ecc…)
chdir directory
cambia la directory corrente (come cd di UNIX)
rmdir directory
cancella la directory indicata
mkdir (directory,modo)
Crea una directory con il nome dato, modo sono i diritti (ad esempio 777)
rename (old,new)
Rinomina il file di nome old in uno di nome new (come mv diUNIX)
unlink lista
Cancella i file della lista (come rm di UNIX)
BIOINFO3 - Lezione 27
6
ESERCIZIO
Scrivere un programma Perl che:
Stampa a video la frase: “inserire il nome del file :”
Legge da tastiera il nome di un file
Se il file esiste:
lo apre e ne legge le righe ad una ad una, contandone il numero
stampa a video la frase: “il file nome-del-file contiene numero-righe righe\n”
Se il file non esiste:
stampa a video la frase: “il file nome-del-file non esiste\n”
BIOINFO3 - Lezione 27
7
SOLUZIONE ESERCIZIO
BIOINFO3 - Lezione 27
8
RIEPILOGO
•Operazioni su file e directory
BIOINFO3 - Lezione 27
9
Scarica

bioinfo3