Newsgroup: it.comp.lang.visual-basic
Titolo: EOF: Ogni tanto tradisce?

Vi ricordate quel file importato da yahoo di cui ho parlato piů sotto?
Ebbene! Non la smette di procurarmi grattacapi (facevo prima a trascriverlo
a mano! :-)))
Veniamo alla domanda:
Ho fatto una routine simile a:
DIM Buffer AS STRING
DO
    LINE INPUT #FileNum,Buffer
LOOP UNTIL EOF(FileNum)
Orbene: Il programma si ferma con un "Input Past End of file" :-??
Facendo cosě:
DO
    Debug.Print ("LOC:" & Loc(FileNum) & "LOF:" & LOF(FileNum) & "EOF: " &
EOF(FileNum))
    LINE INPUT #FileNum,Buffer
LOOP UNTIL EOF(FileNum)
Il risultato all'ultimo ciclo prima dell'errore č stato:
LOC:768 LOF:768 EOF: False
Domanda: Ma EOF non č uguale a TRUE se LOC = LOF?
Grazie a tutti e ciao.
Francesco

 ha scritto nel messaggio
news:wMrg8.61279$fa5.1...@twister2.libero.it...

Non č che ci abbia capito molto ma un paio di cosette potrei provare a
buttartele lě,
1. il ciclo per leggere un file deve essere un while not eof altrimenti
potresti aver problemi con file vuoti
2. stai leggendo per righe: non č che sull'ultima manchi il simbolo di
terminazione di riga e la line input, non trovandolo,  pensa di proseguire
quando invece trova Eof?
3. leggiti il manifesto del NG e i messaggi inviati da [HELP DESK]
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
4. questo č quanto dice M$ a propposito della Line input
I dati letti tramite Line Input # vengono in genere scritti su file con
Print #.
L'istruzione Line Input # consente di leggere tutti i caratteri in un file
un carattere per volta, fino al ritorno a capo (Chr(13)) o alla sequenza
ritorno a capo-avanzamento riga (Chr(13) + Chr(10)). Le sequenze ritorno a
capo-avanzamento riga vengono ignorate e non aggiunte alla stringa di
caratteri.
Quindi alla fine di ogni riga ci deve essere un delimitatore altrimenti
ciccia.
Soluzione: vedi tu, al limite non usare line input.
Spero di esserti stato utile.
Ciao
--
V. Roccasalvo
email:
vrocca....@iname.nos_pam.com
Pregasi rimuovere nos_pam prima di scrivere

 Soluzione: vedi tu, al limite non usare line input.
Già trovata:
IF LOC(FileNum)>=LOF(FileNum) THEN EXIT DO
Funziona che è una tomba .... ehm .... bomba.
Ciao e grazie della risposta.
Francesco


E' piuttosto sporca... ma mi sembra sicura forse è meglio aggiungerla nella
condizione del ciclo prima della eof, piuttosto che nel corpo con una exit
do...
Anche M$ ammette...
La funzione EOF restituisce False fino a quando non viene raggiunta la fine
del file. Quando la funzione viene utilizzata con file aperti in modalità
Random o Binary, restituirà False se l'ultima istruzione Get eseguita non è
stata in grado di leggere un intero record.
Se si tenta di leggere i file aperti in modalità Binary utilizzando la
funzione Input fino a quando EOF non restituisce True, verrà generato un
errore. Utilizzare le funzioni LOF e Loc al posto di EOF se per la lettura
di file binari viene utilizzata Input oppure utilizzare Get con la funzione
EOF. Con i file aperti in modalità Output, EOF restituisce sempre True.
Ciao,


 Orbene: Il programma si ferma con un "Input Past End of file" :-??
Certo, perche' EOF lo devi testare PRIMA di fare la input:
Dim Buffer As String
Do While Not EOF(FileNum)
    Line Input#FileNum, Buffer
Loop
--
   Alex Palmese
---
Sei anche tu stanco dei messaggi spam? Usa Terminator, il programma
anti-spam italiano FREEWARE! 
http://www.sertel.net/terminator/

 di tag (è una delle regole del NG).
Ahhhh! Benissimo! Ora che lo so...
Francesco