Perl/File: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica |
m Update syntaxhighlight tags - remove use of deprecated <source> tags |
||
Riga 14:
Questa funzione richiede come parametri una "espressione", chiamata FILEHANDLE, per poter gestire il file, e il nome del file
<
open ( MIOFILE , "pippo.txt" );
</syntaxhighlight>
'''NOTA:''' a essere espliciti occorrerebbe scrivere open ( MIOFILE , "<pippo.txt" ); ma la open di default è in lettura.
La funzione open ritorna un "false" in caso di problemi e imposta la variabile speciale <code>$!</code> che contiene il motivo indicato dal sistema operativo (es: file inesistente , non posso aprire il file, etc...)
<
$esito = open ( MIOFILE , "pippo.txt" );
if ( ! $esito )
Riga 27:
die ( "Non è stato possibile aprire il file pippo.txt : $!" );
}
</syntaxhighlight>
oppure:
<
if ( ! open ( MIOFILE , "pippo.txt" ) )
{
die ( "Non è stato possibile aprire il file pippo.txt : $!" );
}
</syntaxhighlight>
oppure ancora:
<
unless ( open ( MIOFILE , "pippo.txt" ) )
{
die ( "Non è stato possibile aprire il file pippo.txt : $!" );
}</
Sfruttando l'operatore || è possibile aprire un file o far uscire dal programma informando del motivo con una sola riga di codice:
<
open ( MIOFILE , "pippo.txt" ) || die ( "Non è stato possibile aprire il file pippo.txt : $!" );
</syntaxhighlight>
che sicuramente ha una forma pulita.
Riga 56:
Vediamo:
<
while ( $linea = <MIOFILE> )
{
print $linea;
}</
oppure
<
@tuttoIlFile = <MIOFILE>;
print @tuttoIlFile;
</syntaxhighlight>
;ATTENZIONE : il FILEHANDLE viene usato tra <code><</code> e <code>></code> quando si legge!
Riga 72:
Per chiudere un file si usa la funzione close() che richiede il FILEHANDLE da chiudere. Infatti un programma può aprire più file alla volta.
<
close ( MIOFILE );
</syntaxhighlight>
== APERTURA in scrittura di un file (di testo) ==
Riga 80:
Per poter scrivere in un file (NOTA: solo scrivere!) occorre aggiungere al nome file il simbolo '>'
Vediamo un esempio:
<
open ( MIOFILE , ">pippo.txt" );
</syntaxhighlight>
ATTENZIONE: con questa operazione si è di fatto creato un nuovo file, vuoto, cancellando il vecchio.
Come nel caso della lettura, se non ritorna un false allora l'operazione è riuscita e pertanto è possibile applicare nello stesso modo i controlli:
<
$esito = open ( MIOFILE , ">pippo.txt" );
if ( ! $esito )
Riga 92:
die ( "Non è stato possibile aprire il file pippo.txt : $!" );
}
</syntaxhighlight>
oppure :
<
if ( ! open ( MIOFILE , ">pippo.txt" ) )
{
die ( "Non è stato possibile aprire il file pippo.txt : $!" );
}
</syntaxhighlight>
oppure :
<
unless ( open ( MIOFILE , ">pippo.txt" ) )
{
die ( "Non è stato possibile aprire il file pippo.txt : $!" );
}</
oppure la più semplice :
<
open ( MIOFILE , ">pippo.txt" ) || die ( "Non è stato possibile aprire il file pippo.txt : $!" );
</syntaxhighlight>
== SCRITTURA di un file (di testo) ==
Per scrivere in un file è sufficiente utilizzare la print indicando il FILEHANDLE. Infatti se non specificato (di default) la print usa il video (STDOUT).
<
print MIOFILE "Questo l'ho scritto io\n";
</syntaxhighlight>
== APERTURA in aggiunta di un file (di testo) ==
Questa modalità è comoda per aggiungere linee a un file senza rimuoverne il precedente contenuto. Per farlo si possono usare i simboli '>>' prima del nome file:
<
open ( MIOFILE , ">>pippo.txt" );
</syntaxhighlight>
Come nei casi precedenti è possibile fare i controlli che l'operazione si sia svolta correttamente:
<
$esito = open ( MIOFILE , ">>pippo.txt" );
if ( ! $esito )
Riga 130:
die ( "Non è stato possibile aprire il file pippo.txt : $!" );
}
</syntaxhighlight>
etc ...
Riga 136:
Si usa lo stesso costrutto visto prima :
<
== APERTURA,LETTURA/SCRITTURA "mista" di un file (di testo) ==
Riga 145:
*'+>' scrittura e lettura # crea un nuovo file (cursore all'inizio)
*'+>>' aggiunta e lettura # non crea un nuovo file (cursore in fondo)
<
open ( MIOFILE , "+>pippo.txt" ) || die ( "Non è stato possibile aprire il file pippo.txt : $!" );
</syntaxhighlight>
Ovviamente la scrittura "sovrascrive" il contenuto (non inserisce il nuovo testo) e quindi occorre usarla con cautela.
Riga 153:
Per esempio quando leggiamo una riga con il codice :
<
posiziona il cursore al primo carattere successivo alla fine della riga e quindi alla successiva richiesta fornisce la successiva riga.
Riga 159:
La funzione seek ha la seguente sintassi:
<
</syntaxhighlight>
*FILEHANDLE assume lo stesso significato delle altre funzioni;
*num_byte è il numero di byte da saltare. È un numero che può essere positivo o negativo a seconda di "dove"
Riga 167:
quindi:
<
seek( MIOFILE , 0 , 0 ); # si posiziona all'inizio del file
seek( MIOFILE , 0 , 1 ); # si posiziona dov'è ora ! ( e rimane nel file )
seek( MIOFILE , 0 , 2 ); # si posiziona in fondo al file
</syntaxhighlight>
Per sapere la posizione assoluta alla quale è arrivato il cursore (posizione dall'inizio del file) è possibile usare l'istruzione tell:
<
Se tell incontra problemi ritorna un numero negativo.
Vediamo ora questo esempio che rendono meglio l'idea:
<
open ( MIOFILE , "+<pippo.txt" ) || die ( "Non \350 stato possibile aprire il file pippo.txt : $!" );
Riga 197:
close ( MIOFILE );
</
Questo script scrive in fondo al file la riga "riga aggiunta\n" ma mostra il valore di tell man mano che si "scorre" il file (con la seek o con la semplice lettura ).
|