Ricordo a me stesso nuovamente che l'istruzione Line Input legge un file come testo.
Riguardo alla scrittura in Gambas di file a lunghezza fissa, questa in vero è possibile - aggiungendo un terzo elemento all'istruzione Write che specifichi, appunto, quanto lunga deve essere comunque quella scrittura nel file
Esempio:
Write #fluxus, "abcd", 10
laddove la quantità di dati passati da scrivere è pari a quattro (ossia: a-b-c-d), ma si impone all'istruzione comunque di scriverne 10. I restanti sei saranno scritti ciascuno automaticamente come valore zero.
Questa soluzione, come è evidente, non genera le righe all'interno del file. Perciò, volendola comunque utilizzare, si dovrà trovare una soluzione per aggiungere a quei 10 dati un undicesimo: il famoso carattere non stampabile x0A.
Riprendo questa discussione perchè oggi ho dovuto affrontare un problema rivolto alla registrazione e lettura di file .txt contenenti record di natura mista e quindi di lunghezza variabile, sia nel numero dei campi componenti ciascun record, sia nel numero di caratteri complessivi presenti in ciascun record.
Il mio problema è diverso fondamentalmente dall'oggetto indicato in questa discussione, ma reputo che possa essere impiegato anche per le necessità indicate nel primo post.
Io posso dover registrare record formati, da 12 campi, da 8 campi, da 7 campi e da 10 campi. Ho visto che, leggendo il file con l'istruzione "Line Input", posso impegnare un unica stringa contenente tutti i caratteri dell'ultimo record letto. Ciascun campo è diviso dal suo successivo, per default, da un carattere di tabulazione ("\t"). Allora, attraverso l'istruzione split, posso trasferire il contenuto della stringa fornita dalla lettura del file in un array definito con le dimensioni massime possibili, cioè 12. Dopo tale trasferimento di dati, posso riconoscere il tipo record letto (nel mio caso ho registrato un campo con il tipo record), ma potrei farlo anche riconoscendo il numero degli elementi valorizzati tramite l'istruzione split.
Ora il trattamento dei dati letti diventa assolutamente semplice.
Ecco le istruzioni utilizzate:
Dim hRec As String
Dim $CampiRec As New String[15]
'----------------------------------------------------------------------
If Not Exist($File) Then
hFilSeq = Open $File For Create 'Apre il file da creare
Else
hFilSeq = Open $File For Input 'Apre il file per la lettura dell'ultimo record
While Not Eof(hFilSeq)
Line Input #hFilSeq, hRec
$CampiRec = Split(hRec, "\t")
---- bla ---- bla ---- ba----
Wend
:ciao: