VB6 EInlesen von grossen Dateien

  • VB6

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Eierlein.

    VB6 EInlesen von grossen Dateien

    Hi,

    ich möchte eine grosse .csv - Datei (ca. 100 mb+) in VB6 einlesen.

    Mit der hier im Programm üblichen Methode (strInhalt as string)

    Visual Basic-Quellcode

    1. If FSO.FileExists(DatenDIR$ & "\test.csv") Then
    2. sFilename = DatenDIR$ & "\tests.csv"
    3. ' Prüfen, ob Datei existiert
    4. If Dir$(sFilename, vbNormal) <> "" Then
    5. ' Datei im Binärmodus öffnen
    6. iFile = FreeFile: Open sFilename For Binary As #iFile
    7. ' Größe ermitteln und Variable entsprechend
    8. ' mit Leerzeichen füllen
    9. strInhalt = Space$(LOF(iFile))
    10. ' Gesamten Inhalt in einem "Rutsch" einlesen
    11. Get #iFile, , strInhalt
    12. ' Datei schliessen
    13. Close #iFile
    14. End If


    knallt es bei

    strInhalt = Space$(LOF(iFile))

    mit der Fehlermeldung "Nicht genügend Zwischenspeicher..."


    Ich habe hierzu schon etwas gelesen und die (eigentlich c-Funktionen ? )

    Private Declare Function GlobalAlloc Lib "Kernel32.dll" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
    Private Declare Function GlobalLock Lib "Kernel32.dll" (ByVal hMem As Long) As Long
    Private Declare Function GlobalUnlock Lib "Kernel32.dll" (ByVal hMem As Long) As Long
    Private Declare Function GlobalFree Lib "Kernel32.dll" (ByVal hMem As Long) As Long

    gefunden. Damit komme ich aber derzeit nicht richtig klar.


    Hierzu bräuchte ich bitte einen Tipp, ich möchte den Inhalt der Datei per

    Visual Basic-Quellcode

    1. Split(strInhalt, vbCrLf)


    in ein Array schreiben.

    Wie mache ich das mit den global... Funktionen oder gIbt es hierzu eine bessere Lösung ?


    Vielen Dank vorab für Eure Hilfe,

    MfG...Mabbi

    Nachtrag:

    Das Thema hat sich gerade schon erledigt, ich lese die Datei einfach zeilenweise ein und gut ist.
    Dauert zwar länger so wie es aussieht. Funktioniert aber.


    Für alle mit demselben Problem:
    Wenn es eine .csv Datei ist mit VBCRLF als Zeilentrenner: (strsplit ist ein String-Array)

    Visual Basic-Quellcode

    1. Open DatenDIR$ & "\Export\test.csv" For Input As #iFile
    2. 'auslesen bis zum Dateiende
    3. Do While Not EOF(iFile)
    4. 'zeilenweise auslesen und übernehmen
    5. Line Input #iFile, strSplit(Counter)
    6. Counter = Counter + 1
    7. Loop
    8. Close #iFile


    M


    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Mabbi“ ()

    Visual Basic-Quellcode

    1. Sub Einlesen()
    2. Dim arr$(), i&, z&, sFilename$, DatenDIR$, IFile%
    3. DatenDIR$ = "d:\#0" 'Testpfad
    4. z = 5000
    5. ReDim arr(z)
    6. sFilename = DatenDIR$ & "\testcsv.csv"
    7. IFile = FreeFile
    8. Open sFilename For Input As #IFile
    9. While Not EOF(IFile)
    10. Line Input #IFile, arr(i)
    11. i = i + 1
    12. If i = z Then
    13. z = z + 1000
    14. ReDim Preserve arr(z)
    15. End If
    16. Wend
    17. Close
    18. Debug.Print i, z, arr(i - 1)
    19. End Sub