Differenze tra le versioni di "Leggere un file di testo"
(Creata pagina con 'Fra le varie modalità per effettuare la ''lettura'' di dati da un file di testo (''leggere in rappresentazione stringa un file''), possiamo annoverare anche queste esposte ap...') |
|||
(3 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
Fra le varie modalità per effettuare la ''lettura'' di dati da un file di testo (''leggere in rappresentazione stringa un file''), possiamo annoverare anche queste esposte appresso. | Fra le varie modalità per effettuare la ''lettura'' di dati da un file di testo (''leggere in rappresentazione stringa un file''), possiamo annoverare anche queste esposte appresso. | ||
− | + | ===Con il metodo ''File.Load''=== | |
− | + | L'uso del Metodo ".Load( )" della Classe ''File'' è certamente il modo più semplice per leggere un file di testo. | |
− | + | Public Sub Button1_Click() | |
Dim s As String | Dim s As String | ||
− | + | s = File.<FONT color=#B222222>Load</font>("<FONT color=darkgreen>''/percorso/del/file/di/testo''</font>") | |
− | + | End | |
− | + | ===Con "''Open....For Read/Input''" e "''Line Input''"=== | |
− | + | Public Sub Main() | |
Dim fl As File | Dim fl As File | ||
− | Dim s | + | Dim s As String |
− | + | fl = Open "<FONT color=darkgreen>''/percorso/del/file/di/testo''</font>" For Read <FONT color=#006400>' ''...oppure "Input"''</font> | |
− | |||
<FONT color=gray>' ''Compie il ciclo fin tanto che non è giunto alla fine del file:''</font> | <FONT color=gray>' ''Compie il ciclo fin tanto che non è giunto alla fine del file:''</font> | ||
− | + | While Not Eof(fl) | |
<FONT color=gray>' ''"Line Input" legge le stringhe in un File di testo fino al carattere di "nuova linea a capo":''</font> | <FONT color=gray>' ''"Line Input" legge le stringhe in un File di testo fino al carattere di "nuova linea a capo":''</font> | ||
− | + | Line Input #fl, s | |
− | <FONT color=gray>' ''Mostra il contenuto della variabile s | + | <FONT color=gray>' ''Mostra il contenuto della variabile s:''</font> |
− | + | Print s | |
− | + | Wend | |
− | + | fl.Close | |
− | + | End | |
− | + | ===Con "''Open....For Read/Input''" e "''Read''", '''-256'''=== | |
In Gambas 3 riguardo alla specificazione di un numero negativo nel terzo elemento sintattico (numero di byte di legge per volta) dell'istruzione ''Read'' | In Gambas 3 riguardo alla specificazione di un numero negativo nel terzo elemento sintattico (numero di byte di legge per volta) dell'istruzione ''Read'' | ||
Read #file, stringa, <FONT color=#B222222>-n</font> | Read #file, stringa, <FONT color=#B222222>-n</font> | ||
Riga 42: | Riga 41: | ||
In sostanza, verrà letta una quantità di byte per volta, indicata dal valore -n di tipo 8bit, comunque di fatto non eccedente la fine del file, evitando così l'errore "''End of file''". | In sostanza, verrà letta una quantità di byte per volta, indicata dal valore -n di tipo 8bit, comunque di fatto non eccedente la fine del file, evitando così l'errore "''End of file''". | ||
La combinazione di quel valore negativo con il ciclo ''While...Wend'' consente, dunque, di leggere l'intero file senza provocare quell'errore di fine file. | La combinazione di quel valore negativo con il ciclo ''While...Wend'' consente, dunque, di leggere l'intero file senza provocare quell'errore di fine file. | ||
− | + | Public Sub Main() | |
Dim fl As File | Dim fl As File | ||
− | Dim s | + | Dim s As String |
− | + | fl = Open "<FONT color=darkgreen>''/percorso/del/file/di/testo''</font>" For Read <FONT color=gray>' ''...oppure "Input"''</font> | |
− | |||
While Not Eof(fl) | While Not Eof(fl) | ||
− | Read #fl, s | + | Read #fl, s, <FONT color=#B22222>-256</font> |
− | <FONT color=gray>' ''Mostra il contenuto della variabile s | + | <FONT color=gray>' ''Mostra il contenuto della variabile s:''</font> |
− | + | Print s | |
− | + | Wend | |
− | + | fl.Close | |
− | + | End | |
− | + | ===Con "''Open....For Read/Input''" e "''Read......, '''Lof'''()''"=== | |
Come terzo elemento sintattico di ''Read'', indicante la quantità di byte da leggere volta per volta, viene in questo caso posta la funzione ''Lof()'' con argomento il flusso medesimo. Il numero di byte da leggere, dunque, è uguale alla lunghezza dello flusso aperto, ossia la dimensione dell'intero file: | Come terzo elemento sintattico di ''Read'', indicante la quantità di byte da leggere volta per volta, viene in questo caso posta la funzione ''Lof()'' con argomento il flusso medesimo. Il numero di byte da leggere, dunque, è uguale alla lunghezza dello flusso aperto, ossia la dimensione dell'intero file: | ||
− | + | Public Sub Main() | |
Dim fl As File | Dim fl As File | ||
− | Dim s | + | Dim s As String |
− | |||
− | + | fl = Open "<FONT color=darkgreen>''/percorso/del/file/di/testo''</font>" For Read <FONT color=#006400>' ''...oppure "Input"''</font> | |
− | + | Read #fl, s, <FONT color=#B22222>Lof(fl)</font> | |
− | + | Print s | |
− | + | fl.Close | |
− | + | End | |
− | + | ===Con "''Open....For Read''" e "''Stat().Size''"=== | |
− | Similmente al caso prima visto, nel quale si è quantificata mediante la funzione | + | Similmente al caso prima visto, nel quale si è quantificata mediante la funzione "Lof()" l'entità dei byte da leggere, è possibile utilizzare la Proprietà ".Size" della Classe "Stat()". |
<BR>Tale proprietà ritorna la dimensione di un file. | <BR>Tale proprietà ritorna la dimensione di un file. | ||
− | + | Public Sub Main() | |
Dim fl As File | Dim fl As File | ||
Dim s As String | Dim s As String | ||
− | |||
− | + | fl = Open "<FONT color=darkgreen>''/percorso/del/file/di/testo''</font>" For Read | |
− | + | Read #fl, s$, <FONT color=#B22222>Stat("</font>''/percorso/del/file/di/testo''<FONT color=#B22222>").Size</font> | |
− | + | Print s | |
− | + | fl.Close | |
+ | |||
+ | End | ||
+ | Se si vuole utilizzare un ciclo ''While...Wend'' e leggere un byte per volta da convertire in carattere ASCII, si potrà scrivere così: | ||
+ | Public Sub Main() | ||
+ | |||
+ | Dim fl As File | ||
+ | Dim b As Byte | ||
+ | Dim s As String | ||
− | ''' | + | s = "<FONT color=darkgreen>''/percorso/del/file/di/testo''</font>" |
+ | |||
+ | fl = Open s For Read | ||
+ | |||
+ | While Seek(fl) < Stat(s).Size <FONT color=gray>' '''ma anche più semplicemente con: Not Eof(Fl)''</font> | ||
+ | Read #fl, b | ||
+ | Print Chr(b); | ||
+ | Wend | ||
+ | |||
+ | End | ||
− | + | ===Con "''Open....For Read/Input''" e "''Input''"=== | |
− | + | Public Sub Main() | |
Dim fl As File | Dim fl As File | ||
− | Dim s | + | Dim s As String |
− | Dim ss | + | Dim ss As New String[] |
− | Dim | + | Dim b As Byte |
+ | fl = Open "<FONT color=darkgreen>''/percorso/del/file/di/testo''</font>" For Read <FONT color=gray>' ''...oppure "Input"''</font> | ||
− | + | While Not Eof(fl) | |
− | + | Input #fl, s | |
− | + | <FONT color=gray>' ''Poiché "Input" legge le stringhe in un File di testo fino all'interruzione dello spazio o al carattere di "nuova linea", ogni parola del testo, delimitata da uno spazio, viene individuata e caricata in un nuovo elemento della variabile-array ss:''</font> | |
− | + | ss.Push(s) | |
− | |||
− | <FONT color=gray>' ''Poiché "Input" legge le stringhe in un File di testo fino all'interruzione dello spazio o al carattere di "nuova linea", | ||
− | |||
− | |||
Wend | Wend | ||
− | + | Close #fl | |
− | <FONT color=gray>' ''Mostra | + | <FONT color=gray>' ''Mostra ogni stringa contenuta in ciascun elemento della variabile-array ss:''</font> |
− | + | For b = 0 To ss.Max | |
− | + | Print ss[b] | |
− | + | Next | |
− | + | ||
− | + | End | |
− | + | ===Uso del Metodo ".ReadLine()" della Classe ''Stream''=== | |
Si potrà anche usare il metodo ''.ReadLine()'' della classe ''Stream'', ma comunque applicabile anche per le variabili di tipo ''File''. In particolare il metodo ''.ReadLine()'' legge una linea di testo dal flusso, come fa l'istruzione ''Line Input'', e restituisce ovviamente una stringa. In questo caso il file va aperto con il consueto comando ''Open'', ma non è necessario specificare la modalità di apertura del file. | Si potrà anche usare il metodo ''.ReadLine()'' della classe ''Stream'', ma comunque applicabile anche per le variabili di tipo ''File''. In particolare il metodo ''.ReadLine()'' legge una linea di testo dal flusso, come fa l'istruzione ''Line Input'', e restituisce ovviamente una stringa. In questo caso il file va aperto con il consueto comando ''Open'', ma non è necessario specificare la modalità di apertura del file. | ||
− | + | Public Sub Main() | |
Dim fl As File | Dim fl As File | ||
Dim s As String | Dim s As String | ||
+ | fl = Open "<FONT color=darkgreen>''/percorso/del/file/di/testo''</font>" | ||
− | + | While Not Eof(fl) | |
+ | s = fl<FONT color=#B22222>.ReadLine()</font> | ||
+ | Print s; | ||
+ | Wend | ||
− | + | fl.Close | |
− | |||
− | |||
− | |||
− | + | End | |
− | |||
− | |||
− | + | ===Uso della Proprietà ".Lines" della Classe ''Stream''=== | |
− | Si potrà anche usare la | + | Si potrà anche usare la Proprietà ".Lines" della classe ''Stream''. |
− | <BR>In particolare la | + | <BR>In particolare la Proprietà ".Lines" ritorna un oggetto virtuale che consente di distinguere un flusso di dati linea per linea. |
− | + | Public Sub Main() | |
Dim fl As File | Dim fl As File | ||
Riga 158: | Riga 167: | ||
Dim t As Stream | Dim t As Stream | ||
+ | t = Open "<FONT color=darkgreen>''/percorso/del/file/di/testo''</font>" | ||
− | + | For Each s In <FONT color=#B22222>t.Lines</font> | |
− | + | Print s | |
− | + | Next | |
− | |||
− | |||
− | + | t.Close | |
− | + | End |
Versione attuale delle 14:29, 18 mar 2024
Fra le varie modalità per effettuare la lettura di dati da un file di testo (leggere in rappresentazione stringa un file), possiamo annoverare anche queste esposte appresso.
Indice
- 1 Con il metodo File.Load
- 2 Con "Open....For Read/Input" e "Line Input"
- 3 Con "Open....For Read/Input" e "Read", -256
- 4 Con "Open....For Read/Input" e "Read......, Lof()"
- 5 Con "Open....For Read" e "Stat().Size"
- 6 Con "Open....For Read/Input" e "Input"
- 7 Uso del Metodo ".ReadLine()" della Classe Stream
- 8 Uso della Proprietà ".Lines" della Classe Stream
Con il metodo File.Load
L'uso del Metodo ".Load( )" della Classe File è certamente il modo più semplice per leggere un file di testo.
Public Sub Button1_Click() Dim s As String s = File.Load("/percorso/del/file/di/testo") End
Con "Open....For Read/Input" e "Line Input"
Public Sub Main() Dim fl As File Dim s As String fl = Open "/percorso/del/file/di/testo" For Read ' ...oppure "Input" ' Compie il ciclo fin tanto che non è giunto alla fine del file: While Not Eof(fl) ' "Line Input" legge le stringhe in un File di testo fino al carattere di "nuova linea a capo": Line Input #fl, s ' Mostra il contenuto della variabile s: Print s Wend fl.Close End
Con "Open....For Read/Input" e "Read", -256
In Gambas 3 riguardo alla specificazione di un numero negativo nel terzo elemento sintattico (numero di byte di legge per volta) dell'istruzione Read
Read #file, stringa, -n
la documentazione ufficiale dice: " If Length is negative, then at most (- Length) bytes are read until the end of the stream. "
In sostanza, verrà letta una quantità di byte per volta, indicata dal valore -n di tipo 8bit, comunque di fatto non eccedente la fine del file, evitando così l'errore "End of file". La combinazione di quel valore negativo con il ciclo While...Wend consente, dunque, di leggere l'intero file senza provocare quell'errore di fine file.
Public Sub Main() Dim fl As File Dim s As String fl = Open "/percorso/del/file/di/testo" For Read ' ...oppure "Input" While Not Eof(fl) Read #fl, s, -256 ' Mostra il contenuto della variabile s: Print s Wend fl.Close End
Con "Open....For Read/Input" e "Read......, Lof()"
Come terzo elemento sintattico di Read, indicante la quantità di byte da leggere volta per volta, viene in questo caso posta la funzione Lof() con argomento il flusso medesimo. Il numero di byte da leggere, dunque, è uguale alla lunghezza dello flusso aperto, ossia la dimensione dell'intero file:
Public Sub Main() Dim fl As File Dim s As String fl = Open "/percorso/del/file/di/testo" For Read ' ...oppure "Input" Read #fl, s, Lof(fl) Print s fl.Close End
Con "Open....For Read" e "Stat().Size"
Similmente al caso prima visto, nel quale si è quantificata mediante la funzione "Lof()" l'entità dei byte da leggere, è possibile utilizzare la Proprietà ".Size" della Classe "Stat()".
Tale proprietà ritorna la dimensione di un file.
Public Sub Main() Dim fl As File Dim s As String fl = Open "/percorso/del/file/di/testo" For Read Read #fl, s$, Stat("/percorso/del/file/di/testo").Size Print s fl.Close End
Se si vuole utilizzare un ciclo While...Wend e leggere un byte per volta da convertire in carattere ASCII, si potrà scrivere così:
Public Sub Main() Dim fl As File Dim b As Byte Dim s As String s = "/percorso/del/file/di/testo" fl = Open s For Read While Seek(fl) < Stat(s).Size ' 'ma anche più semplicemente con: Not Eof(Fl) Read #fl, b Print Chr(b); Wend End
Con "Open....For Read/Input" e "Input"
Public Sub Main() Dim fl As File Dim s As String Dim ss As New String[] Dim b As Byte fl = Open "/percorso/del/file/di/testo" For Read ' ...oppure "Input" While Not Eof(fl) Input #fl, s ' Poiché "Input" legge le stringhe in un File di testo fino all'interruzione dello spazio o al carattere di "nuova linea", ogni parola del testo, delimitata da uno spazio, viene individuata e caricata in un nuovo elemento della variabile-array ss: ss.Push(s) Wend Close #fl ' Mostra ogni stringa contenuta in ciascun elemento della variabile-array ss: For b = 0 To ss.Max Print ss[b] Next End
Uso del Metodo ".ReadLine()" della Classe Stream
Si potrà anche usare il metodo .ReadLine() della classe Stream, ma comunque applicabile anche per le variabili di tipo File. In particolare il metodo .ReadLine() legge una linea di testo dal flusso, come fa l'istruzione Line Input, e restituisce ovviamente una stringa. In questo caso il file va aperto con il consueto comando Open, ma non è necessario specificare la modalità di apertura del file.
Public Sub Main() Dim fl As File Dim s As String fl = Open "/percorso/del/file/di/testo" While Not Eof(fl) s = fl.ReadLine() Print s; Wend fl.Close End
Uso della Proprietà ".Lines" della Classe Stream
Si potrà anche usare la Proprietà ".Lines" della classe Stream.
In particolare la Proprietà ".Lines" ritorna un oggetto virtuale che consente di distinguere un flusso di dati linea per linea.
Public Sub Main() Dim fl As File Dim s As String Dim t As Stream t = Open "/percorso/del/file/di/testo" For Each s In t.Lines Print s Next t.Close End