Newsgroup: it.comp.lang.visual-basic
Titolo: Lettura intelligente

Io dovrei aprire un file di testo e aggiungere delle informazioni ad un
alist box.
Mi spiego meglio , il file di testo è composto da
<tel>02.....</tel>
<testo>ciao</testo>
Il problema è che io drovrei leggere tutto il testo e aggiungere nella list
box  le righe <tel></tel> togliendo il <tel></tel>
Mi sapete aiutare!?!
Grazie

 Il problema č che io drovrei leggere tutto il testo e aggiungere nella


 a = mid(a,6,len(a)-6)  direi  -11 se vuoi togliere anche la coda.
comunque se hai neccessita' di fare una ricerca ciclica  su identificatori
diversi che ti ritorni la stringa conoscendo o l'inizio/fine o solo l'inizio
puoi usare questa modificandola all'uopo:
Sub Command1_Click()
    Dim Testo As String
    Testo="<TESTO>Ciao<\TESTO>"
    Testo=Ritorna(Testo,"<TESTO>","<\TESTO>")
End Sub
Function Ritorna(Stringa As String, Inizio As String, Optional Fine) As
String
    '//ritorno il pezzo fra inizio e fine
    Dim PosInizio As Long, PosFine As Long, LungInizio As Long
    Ritorna = ""
    LungInizio = Len(Inizio)
    PosInizio = InStr(1, UCase(Stringa), UCase(Inizio), vbBinaryCompare)
    '//stringa non trovata
    If PosInizio = 0 Then Exit Function
    '//posizione iniziale effettiva
    PosInizio = PosInizio + LungInizio
    If IsMissing(Fine) Then
        Ritorna = Mid(Stringa, PosInizio)
        Exit Function
    End If
    PosFine = InStr(1, UCase(Stringa), UCase(Fine), vbBinaryCompare)
    '//stringa non trovata
    If PosFine = 0 Or PosFine <= PosInizio Then Exit Function
    Ritorna = Mid(Stringa, PosInizio, PosFine - PosInizio)
End Function
beppe

Scusate se ve lo richiedo ma è stato cancellato prima che riuscissi a
leggere le risposte io devo leggere un file di testo con delle limitazione
cioè
<tel>02...</tel>
<testo>testo</testo>
Io dovrei riuscire a leggere 02 e il testo c'è un modo per farlo!?!
Il file non è un xml o xls o altri.
Grazie
E scusate per il ritardo

 Mi sapete aiutare!?!
Qualche cosa tipo:
TestodiInput ="<Test>Test</Test>
   TestoIn = Trim$(TestodiInput)
   InsPos1 = InStr(TestoIn, ">")
   TestoOut = Mid$(TestoIn, InsPos1 + 1, InStr(TestoIn, "</") - InsPos1 - 1)
   TestodiOutput = TestoOut
TestodiOutput sarà = "Test"

> Non funziona mi da degli errori
Ci credo, ci sono degli erroretti di sintassi dovuti al
fatto che ho scritto il codice direttamente nel messaggio.
Nel messaggio precedente ti avevo consigliato di inserire
la prima routine indicata in una funzione:
Public Function DecodificaTesto(TestoInput As String) As String
Dim TestoIn as String
Dim TestoOut As String
Dim InsPos1 as Long
   TestoIn = Trim$(TestoInput)
   InsPos1 = InStr(TestoIn, ">")
   TestoOut = Mid$(TestoIn, InsPos1 + 1, InStr(TestoIn, "</") - InsPos1 - 1)
   DecodificaTesto = TestoOut
Exit Function
Dopodiché usi la seconda procedura che richiama la
funzione DecodificaTesto().
Dim FileNum As Integer
Dim TestodiInput As String
 FileNum = FreeFile(0)
 Open "NomeDelFile" For Input Access Read As #FileNum
 Do While Not EOF(FileNum)
     Line Input #FileNum, TestodiInput
     If InStr(TestodiInput, "<Tel>") Then
         List1.AddItem DecodificaTesto(TestodiInput)
     ElseIf InStr(TestodiInput, "<Testo>") Then
         List2.AddItem DecodificaTesto(TestodiInput)
     Else
         ' Qualche atra cosa
     End If
 Loop
 Close #FileNum
 Ti manca di inserire la gestione degli errori e delle eccezioni;
magari adattare il codice a file di testo con piů tag sulla
stessa linea. Altrimenti il subject si spreca.
OCCHIO: ci potrebbero essere ancora degli orrori di
sintassi dato che continuo a non usare l'IDE di VB.
(Penso che, al limite, li puoi correggere da solo).

 magari adattare il codice a file di testo con più tag sulla


> Adesso non mi da più errori ma non funziona.
Non è che ti ssi dimenticato di inserire
 Option Compare Text
nel form, vero ?
Ho provato adesso l'ESEMPIO che ti avevo fatto
e funziona benissimo. Te lo posto nuovamente copiandolo
dall'IDE di VB
Public Function DecodificaTesto(TestoInput As String) As String
Dim TestoIn As String
Dim TestoOut As String
Dim InsPos1 As Long
   TestoIn = Trim$(TestoInput)
   InsPos1 = InStr(TestoIn, ">")
   TestoOut = Mid$(TestoIn, InsPos1 + 1, InStr(TestoIn, "</") - InsPos1 - 1)
   DecodificaTesto = TestoOut
End Function
Ho inserito il resto in un form che ha due listbox
(List1 e List2) e un pulsante (Command1)
Private Sub Command1_Click()
Dim FileNum As Integer
Dim TestodiInput As String
 FileNum = FreeFile(0)
 Open "c:\prova.txt" For Input Access Read As #FileNum
 Do While Not EOF(FileNum)
     Line Input #FileNum, TestodiInput
     If InStr(TestodiInput, "<Tel>") Then
         List1.AddItem DecodificaTesto(TestodiInput)
     ElseIf InStr(TestodiInput, "<Testo>") Then
         List2.AddItem DecodificaTesto(TestodiInput)
     Else
         ' Qualche atra cosa
     End If
 Loop
 Close #FileNum
End Sub

 wrote in message 89jsqu$ogg$1...@nslave2.tin.it...


 problema più grosso che cosè Option Compare Text
E' chiaramente documentato. Leggiti l'help in linea.
In breve:
normale in VB la comparazione delle stringhe è Case Sensitive
"Pippo" NON è uguale a "pippo"
Inserendo l'opzione Option Compare Text
"Pippo" è uguale a "pippo" o, meglio,
"PIPPO" = "PIPPO"
Se nel tuo testo i tag possono essere definiti come
<Testo> <testo> <TESTO> indifferentemente,
allora è forse meglio utilizzare Option Compare Text
per evitare di valutare tutti i casi in una subroutine.
Nella funzione che ti ho descritto viene valutato
solo il caso "<Testo>". E' chiaro comunque che
se si può anche trasformare il testo di input con
TestoDiInput = Ucase(TestoDiInput) e risolvere
comodamente il problema. Sempre che la distinzione
del "case" non sia importante.