PDA

View Full Version : [VBA] open file for input, ma fine linea LF


Pirulicchio
13-11-2006, 16:54
Non riesco a leggere un file .sta che poi non e' altro che un file di testo creato da un programma di calcolo, con il comado input di vba in excel. Il problema credo sia dovuto dal fatto che il fine linea di questo file e' LF invece che CRLF.
Il codice che da errore e':
If CommonDialog1.Filename <> "" Then
F = FreeFile()
Open CommonDialog1.Filename For Input As #F
For r = 1 To 10000
Line Input #F, lineoftext
If Left(lineoftext$, 4) = "Fine" Then
tot = r - 1
Close #F
Else
riga(r) = lineoftext
End If
Next r
Else
GoTo Pos1
End If
L'errore che ricevo e' "runtime error '62'; input past end of file.
La soluzione sarebbe aprire tutti i file prima con word e salvarli con la dicitura ISO etc, ma e' molto scocciante sarebbe migliore darglielo in pasto subito soprattutto se i file in questione sono piu' di 100. Spero in un vostro aiuto, ciao......

icecube_HU
14-11-2006, 15:05
Non riesco a leggere un file .sta che poi non e' altro che un file di testo creato da un programma di calcolo, con il comado input di vba in excel.Il problema credo sia dovuto dal fatto che il fine linea di questo file e' LF invece che CRLF.

La soluzione sarebbe aprire tutti i file prima con word e salvarli con la dicitura ISO etc, ma e' molto scocciante sarebbe migliore darglielo in pasto subito soprattutto se i file in questione sono piu' di 100. Spero in un vostro aiuto, ciao......

Il problema e' proprio che Line Input cerca, come delimitatore di fine linea, la sequenza CFLF oppure CR, ma non LF soltanto.

Pero' la soluzione e' abbastanza semplice:
- si legge tutto il file di testo in un'unica soluzione;
- si utilizza la funzione Split, che fa tutto il lavoro: permette di scegliere il delimitatore di fine riga, e ci restituisce una matrice di stringhe con le linee gia' belle pronte !


Dim riga() As String
Open "Prova.txt" For Input As #1
riga = Split(Input(LOF(1), #1), vbLf)
Close #1


Ciao !

Pirulicchio
14-11-2006, 17:21
Funziona alla grade, grazie dell'aiuto, ciao.....