Newsgroup: it.comp.lang.visual-basic
Titolo: Lettura file di testo: HELP

Sto costruendo un programma che necessita di leggere i file di testo linea
per linea, all'interno di queste linee si trovano però punti e punti e
virgole, dunque mi trovo impossibilitato ad usare Input. In questo NG mi è
stato consigliato di usare Line Input, anche se questo mi causa problemi. Il
mio codice per leggere la linea x è il seguente:
    Open "percorso file" For Input As #1
         For intCont = 1 to x
            Line Input #1, strLinea
        Next
    Close #1
So che il problema è parecchio semplice per voi, eppure io ho già perso
parecchie ore per niente alla ricerca di soluzioni alternative.
Grazie Feli
-----= Posted via Newsfeeds.Com, Uncensored Usenet News =-----
http://www.newsfeeds.com
 - The #1 Newsgroup Service in the World!
-----==  Over 80,000 Newsgroups - 16 Different Servers! =-----

 ha scritto nel messaggio
news:3f008...@corp.newsgroups.com...


 Io intanto ometterei il ciclo For...Next con un Do...Loop
Si ma il problema non e' quello e sinceramente non capisco cosa ci sia di
strano in quel codice :-/
Line imput ciuccia tutta la linea ( fino a 1024char se ricordo bene) e poi
sei tu che te la splitti ( funzione split ) e la analizzi come vuoi, quindi
non vedo proprio cosa ci sia di male, ti era stato detto che se le linee
erano costanti potevi aprirlo in modalita' binaria e sfruttare il
posizionamento diretto , a sto punto so curioso, l'op potrebbe farci un
esempio di file tipico da leggere e quello che intende fare ? Tnk
-- 
<Gigio2K>
Sito Comune
Nokia -> I.T.H.N. -> 
http://www.ithn.it/
VB -> I.C.L.VB -> 
http://www.it-lang-vb.net/

     Close #1
Sě, ma se non dici che problema hai, č un po' difficile aiutarti...
Bye, G.

 parecchie ore per niente alla ricerca di soluzioni alternative.
Quale sarebbe il problema?
-Va in EndOfFile prima del previsto (valore di x)? x è sbagliato.
-Non carica righe complete? E' possibile che vi siano dei Nulls (Chr(0)) e/o
dei caratteri di EOF (26=Ctrl+Z ?)
-Il file è davvero un file di testo, ovvero le righe sono concluse da LF+CR?
Ti garantisco che punti e punti e virgola non hanno colpa alcuna.

U9fec>=1
(terza riga)
rcps/5,.4,0..1 /18168..sm edb QsPQsQQs? bed QsPQsQQsJ bed QsPQsQQsM bed QsPQ
sQQs@ ed QsPQsQQsb bed QsPQsQQsB ed QsPQsQQsg ed QsPQsQQsj ed QsPQsQQs` bed 
QsPQsQQsT8beds=2
Grazie ancora Feli


 sotto vi riporto 3 righe "tipiche" create dal programma.
Sì, ma non hai ancora detto qual è il problema...
COS'E' CHE NON FUNZIONA ?
Bye, G.

 U9fec>=1
In effetti per questa riga aumentando di 1 (vedi =1 finale), i primi
caratteri appaiono sensati (data e ora?):
"dgf?17.06.2003 13:36:56?o gf S?RS?SS?A gfd S?RS?SS?L gfd S?RS?SS?O...", gli
altri non ... li interpreto.
Ma, Feli, qual è il problema? Ultimo avviso.

Eccovi finalmente il problema, con il seguente codice ecco come vengono
lette le linee postate:
(codice)
Open "percorso file" For Input As #1
    Do Until EOF(1)
        Line Input #1, strPezzo
        MsgBox strPezzo
        intCont = intCont + 1
    Loop
Close #1
il contatore mi serve per contare le linee, mentre la message box per vedere
come vengono lette
(linee lette)
(prima linea)
`^-+1(*0(,**-
... e si ferma qui !


 ... e si ferma qui !
Allora quel file non è TXT puro, ovvero contiene degli EOF (mi par di
ricordare che sia Ctrl+Z = 26 decimale).
Devi andare in binario (Open for Binary), leggere un tot di bytes (a
sufficienza da includere una linea intera), cercare il CR+NL e ricavare la
riga, quindi riposizionarti (seek) sul byte che segue in CR+NL trovato e
ripetere per la riga seguente.

 ripetere per la riga seguente.
Prova così:
Private Sub Form_Load()
    file_originale = "C:\prova.txt"
    file_destinazione = "C:\prova_destinazione.txt"
    lunghezza_buffer = 5000 'Piu' grande (di almeno 2 bytes) della riga piu'
lunga
    Dim dati_buffer_originale As String
    Dim riga As String
    canale_file_originale = FreeFile
    Open file_originale For Binary Shared As #canale_file_originale
    lunghezza_file_originale = LOF(canale_file_originale)
    canale_file_destinazione = FreeFile
    Open file_destinazione For Output Shared As #canale_file_destinazione
    bytes_letti = 0
    dati_buffer_originale = String(lunghezza_buffer, 0)
    Do
        If EOF(canale_file_originale) Then Exit Do
        Get #canale_file_originale, , dati_buffer_originale
        If EOF(canale_file_originale) Then
            dati_buffer_originale = Left(dati_buffer_originale,
lunghezza_file_originale - bytes_letti)
        End If
        riga = dati_buffer_originale
        fine_riga = InStr(riga, vbNewLine)
        If fine_riga = 0 Then
            MsgBox "Non trovo vbNewLine - Prova ad aumentare
lunghezza_buffer!"
            Stop
        End If
        riga = Left(riga, fine_riga - 1)
'           Eventuale decodifica di riga trasformandola in TXT puro ...
'       ... ################################
        Print #canale_file_destinazione, riga
        bytes_letti = bytes_letti + Len(riga) + Len(vbNewLine)
        If bytes_letti = lunghezza_file_originale Then Exit Do
        Seek canale_file_originale, bytes_letti + 1
    Loop
    Close canale_file_originale
    Close canale_file_destinazione
    MsgBox "Fine procedura"
    Unload Me
End Sub