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
<sourcesyntaxhighlight lang=perl>
open ( MIOFILE , "pippo.txt" );
</syntaxhighlight>
</source>
 
'''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...)
<sourcesyntaxhighlight lang=perl>
$esito = open ( MIOFILE , "pippo.txt" );
if ( ! $esito )
Riga 27:
die ( "Non è stato possibile aprire il file pippo.txt : $!" );
}
</syntaxhighlight>
</source>
oppure:
<sourcesyntaxhighlight lang=perl>
if ( ! open ( MIOFILE , "pippo.txt" ) )
{
die ( "Non è stato possibile aprire il file pippo.txt : $!" );
}
</syntaxhighlight>
</source>
oppure ancora:
<sourcesyntaxhighlight lang=perl>
unless ( open ( MIOFILE , "pippo.txt" ) )
{
die ( "Non è stato possibile aprire il file pippo.txt : $!" );
}</sourcesyntaxhighlight>
 
Sfruttando l'operatore || è possibile aprire un file o far uscire dal programma informando del motivo con una sola riga di codice:
<sourcesyntaxhighlight lang=perl>
open ( MIOFILE , "pippo.txt" ) || die ( "Non è stato possibile aprire il file pippo.txt : $!" );
</syntaxhighlight>
</source>
che sicuramente ha una forma pulita.
 
Riga 56:
 
Vediamo:
<sourcesyntaxhighlight lang=perl>
while ( $linea = <MIOFILE> )
{
print $linea;
}</sourcesyntaxhighlight>
 
oppure
<sourcesyntaxhighlight lang=perl>
@tuttoIlFile = <MIOFILE>;
print @tuttoIlFile;
</syntaxhighlight>
</source>
;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.
<sourcesyntaxhighlight lang=perl>
close ( MIOFILE );
</syntaxhighlight>
</source>
 
== 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:
<sourcesyntaxhighlight lang=perl>
open ( MIOFILE , ">pippo.txt" );
</syntaxhighlight>
</source>
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:
<sourcesyntaxhighlight lang=perl>
$esito = open ( MIOFILE , ">pippo.txt" );
if ( ! $esito )
Riga 92:
die ( "Non è stato possibile aprire il file pippo.txt : $!" );
}
</syntaxhighlight>
</source>
oppure :
<sourcesyntaxhighlight lang=perl>
if ( ! open ( MIOFILE , ">pippo.txt" ) )
{
die ( "Non è stato possibile aprire il file pippo.txt : $!" );
}
</syntaxhighlight>
</source>
oppure :
<sourcesyntaxhighlight lang=perl>
unless ( open ( MIOFILE , ">pippo.txt" ) )
{
die ( "Non è stato possibile aprire il file pippo.txt : $!" );
}</sourcesyntaxhighlight>
 
oppure la più semplice :
<sourcesyntaxhighlight lang=perl>
open ( MIOFILE , ">pippo.txt" ) || die ( "Non è stato possibile aprire il file pippo.txt : $!" );
</syntaxhighlight>
</source>
 
== 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).
<sourcesyntaxhighlight lang=perl>
print MIOFILE "Questo l'ho scritto io\n";
</syntaxhighlight>
</source>
 
== 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:
<sourcesyntaxhighlight lang=perl>
open ( MIOFILE , ">>pippo.txt" );
</syntaxhighlight>
</source>
Come nei casi precedenti è possibile fare i controlli che l'operazione si sia svolta correttamente:
<sourcesyntaxhighlight lang=perl>
$esito = open ( MIOFILE , ">>pippo.txt" );
if ( ! $esito )
Riga 130:
die ( "Non è stato possibile aprire il file pippo.txt : $!" );
}
</syntaxhighlight>
</source>
etc ...
 
Riga 136:
Si usa lo stesso costrutto visto prima :
 
<sourcesyntaxhighlight lang=perl> print MIOFILE "Questo l'ho scritto io\n";</sourcesyntaxhighlight>
 
== 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)
<sourcesyntaxhighlight lang=perl>
open ( MIOFILE , "+>pippo.txt" ) || die ( "Non è stato possibile aprire il file pippo.txt : $!" );
</syntaxhighlight>
</source>
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 :
<sourcesyntaxhighlight lang=perl> $riga = <MIOFILE>;</sourcesyntaxhighlight>
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:
<sourcesyntaxhighlight lang=perl>seek ( FILEHANDLE , num_byte , dove );
</syntaxhighlight>
</source>
*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:
<sourcesyntaxhighlight lang=perl>
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>
</source>
Per sapere la posizione assoluta alla quale è arrivato il cursore (posizione dall'inizio del file) è possibile usare l'istruzione tell:
<sourcesyntaxhighlight lang=perl>$numByte_Ora = tell( MIOFILE ); # Posizione attuale del cursore</sourcesyntaxhighlight>
Se tell incontra problemi ritorna un numero negativo.
 
Vediamo ora questo esempio che rendono meglio l'idea:
<sourcesyntaxhighlight lang=perl>
open ( MIOFILE , "+<pippo.txt" ) || die ( "Non \350 stato possibile aprire il file pippo.txt : $!" );
 
Riga 197:
 
close ( MIOFILE );
</sourcesyntaxhighlight>
 
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 ).