Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565

    VB6 - Lettura di file ad accesso sequenziale (particolare)

    Salve a tutti.
    Devo leggere e catalogare un file ad accesso sequenziale scritto in modo particolare (generato da un computer in automatico)

    "9F1519D7-9DFC-4E44-A401-6465D5F8A62F";"6E8B54BE-9550-4438-8706-9F6EAE7D6903";2006-02-03 19:08:00;"Fixed";"08119736255";"390818651172";"Fra nco";0.008473;0.034808;37
    Ora
    [list=a][*]Esiste un modo per convertire ciò in un database access?[/list=a]

    Ora questo file è fatto in modo molto particolare ovvero alcuni campi hanno le virgolette, altri no, e sono separati da ; e non da , come ha di default il Visual Basic.
    Come, quindi, leggere questo file correttamente?? (poi alla conversione ci penso io
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  2. #2
    Visto che alla conversione ci pensi te, potresti usare il comando Split per separare i vari campi ed usare un array di stringhe. Il problema però di cui mi sono accorto è che non si possono usare istruzioni per l'elaborazione di stringhe, in quanto il testo da te postato contiene virgolette e quindi non viene considerato come una stringa..
    Quello che carichi è proprio questo?

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    357
    Io ho copiato la tua stringa in un file di testo (pippo.txt), poi ho caricato in una listbox e mi sembrano suddivisi correttamente:

    codice:
    Text = FreeFile
        Open "C:\pippo.txt" For Input As Text
        If Not EOF(Text) Then
            Line Input #Text, car1
            car2 = Replace(car1, """", " ")
        End If
        Close Text
        List1.Clear
        Z = 0
        a = 0
        Do Until a > Len(car2)
            a = InStr(Z + 1, car2, ";", vbTextCompare)
            If a > 0 Then
                List1.AddItem Trim(Mid(car2, Z + 1, a - 1 - Z))
                Z = a
            Else
                Exit Do
            End If
        Loop
    Non ho fatto un loop di lettura perchè ho considerato che sia presente un solo record.

    Ciao

  4. #4
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Grazie mille, proverò il codice quanto prima.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  5. #5
    Ciao XWolverineX..il codice postato da mgmg apparentemente è corretto però se lo provi ti accorgerai che NON considera il numero 37 alla fine del record: io mi sono accorto di tale errore perchè ho cercato una soluzione differente rispetto a quella (seppur apprezzabile) di mgmg. Paragonando le due listbox popolate da questi dati ognuna con un metodo diverso (il suo e il mio) ho visto che la mia conteneva il numero 37 e l'altra no: ti posto il codice (penso che lo accetterai in quanto facilissimo da comprendere):
    codice:
    Dim matr() As String
    'qui metti il codice di mgmg fino a List1.clear
    matr = Split(car2, ";", -1, vbTextCompare)
    For i = 0 To UBound(matr)
        List1.AddItem matr(i)
    Next i
    Fammi sapere..

    per mgmg: ho postato il mio codice per due motivi:
    1) c'era questo errore che magari poteva essere importante per XWolverineX
    2) sicuramente è una soluzione più semplice da capire..

    ciao

  6. #6
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Grazie a tutti.
    Non ho ancora avuto il tempo di provare i codici ma me li stavo leggendo, quindi a dir la verità ancora li devo comprendere. VI farò avere mie notizie!
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  7. #7
    Per verificare quello che ti ho scritto, metti nel form due listbox, chiaramente mettendo nel mio codice list2 al posto di list1 (visto che l'ha già messa mgmg); inserisci il mio codice dopo quello di mgmg e vedrai quello di cui parlavo..

    ciao

  8. #8
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Ho risolto grazie al codice di Mde ma ringrazio anche mgmg.
    Ciò che all'inizio non mi era chiaro era
    codice:
    Line Input #TEXT, car1
    e poi ho capito che serve per prendere l'intera linea di testo.
    Poi con
    codice:
    car2 = Replace(car1, """", " ")
    rimuoviamo le virgolette e poi si fa lo split sul ; separatore.
    Per il resto ho capito tutto Grazie!
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  9. #9
    Figurati..è un piacere..
    E pensare che ho risposto perchè sono stato incuriosito dal codice di mgmg..ho pensato: non ci sarà una soluzione più facile e magari veloce?!?!

    Ciao

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    357
    Mde2005 aveva ragione per il mio errore e la sua soluzione è senz'altro più veloce di quella che ti avevo proposto, posto ugualmente il codice corretto, nel caso possa interessare a qualcun altro:

    codice:
        Text = FreeFile
        Open "C:\pippo.txt" For Input As Text
        If Not EOF(Text) Then
            Line Input #Text, car1
            car2 = Replace(car1, """", " ")
        End If
        Close Text
        List1.Clear
        Z = 0
        a = 0
        Do Until a > Len(car2)
            a = InStr(Z + 1, car2, ";", vbTextCompare)
            If a > 0 Then
                List1.AddItem Trim(Mid(car2, Z + 1, a - 1 - Z))
                Z = a
            Else
                List1.AddItem Trim(Mid(car2, Z + 1, Len(car2) - Z))
                Exit Do
            End If
        Loop
    Per correttezza: Line Input #TEXT, car1 serve per leggere una stringa conclusa dal carattere CRLF, quindi se tu avessi avuto più righe avresti dovuto fare un loop per leggere tutte le righe.

    Ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.