Newsgroup: it.comp.lang.visual-basic
Titolo: funzione di input

chi mi può dare una mano?
sono alle prime armi con il VB e non so come risolvere un problema......
ho un file testo le cui righe (circa 500000) sono del tipo:
(String)TAB(1°Double)TAB(2°Double)
ogni campo non ha lunghezza fissa.
i devo caricare su due variabili i vari Double in maniera da riorganizzare
la struttura del file.
....esiste una funzione che mi dica: nella stringa troverai prima uno
String, poi un Double, poi un altro Double?
di solito lo facevo con LTrim e RTrim, ma questa volta, variando le
lunghezze, non so come fare.....
Devo per forza leggere la riga carattere per carattere, inserire un
contatore che indichi dove c'è il TAB etc etc...?
grazie mille
Sara

 ha scritto nel messaggio
news:C5EY6.496$8R5....@news.infostrada.it...


 String, poi un Double, poi un altro Double?
[SNIP]
No, devi sfruttare l'unico punto fisso, cioe' il TAB come separatore; quindi
carica sempre il file riga per riga con l'istruzione 'Line Input' e poi
analizza la stringa, puoi farlo in due modi:
- Se hai VB6
Usando Split come suggerito da giorgio1, il sistema piu' comodo; esempio:
Dim strLine     As String
Dim arResult()  As String
Dim strString As String, dblDouble1 As Double, dblDouble2 As Double
'[..] codice di apertura del file omesso, supponiamo sia stato usato #1...
Line Input #1, strLine
arResult = Split(strLine, vbTab)
If UBound(arResult) <> 2 Then
    'se non hai trovato 3 elementi (0..2) il formato del file
    'non e' come ti aspettavi
    MsgBox "Formato file errato."
Else
    'la funzione Split ha popolato il nostro array separando i tre dati
    'che ci interessavano, li riportiamo su variabili distinte..
    strString = arResult(0)
    dblDouble1 = Val(arResult(1))
    dblDouble2 = Val(arResult(2))
End If
'[...] e cosi' via per ogni riga del file...
- se hai VB precedente
Usando InStr in maniera leggermente piu' elaborata:
Dim strLine     As String
Dim arResult()  As String
Dim strString   As String, dblDouble1 As Double, dblDouble2 As Double
Dim lPos        As Long, lOldPos As Long, iCount As Integer
'[...]codice di apertura del file omesso, supponiamo sia stato usato #1...
strLine = "pippo" & vbTab & "123.34" & vbTab & "0.50"
Line Input #1, strLine
lPos = InStr(1, strLine, vbTab)
Do While lPos <> 0
    Select Case iCount
    Case 0
        'il primo tab delimita la stringa
        strString = Mid$(strLine, 1, lPos - 1)
    Case 1
        'il secondo delimita i due double
        dblDouble1 = Val(Mid$(strLine, lOldPos + 1, lPos - lOldPos - 1))
        dblDouble2 = Val(Mid$(strLine, lPos + 1))
    Case Else
        'Paranoia: non dovrebbe mai passare da qui...
        Exit Do
    End Select
    iCount = iCount + 1 'contiamo quanti tab abbiamo gia' trovato
    lOldPos = lPos
    lPos = InStr(lPos + 1, strLine, vbTab)
Loop
'[...] e cosi' via per ogni riga del file...
questo secondo esempio e' tirato via un po di fretta e probabilmente puo'
essere fatto molto meglio ma la sostanza e' quella
Ciao
--
Luca Dormio
luca....@tin.it

grazie Giorgio e Luca, i vostri suggerimenti mi hanno aiutato a risolvere il
problema!!
"Luca Dormio" <lucaFAV...@tinFAVA.it> ha scritto nel messaggio
news:9gv5il$ecq$1...@fe1.cs.interbusiness.it...
