Live-Forum - Die aktuellen Beiträge
Datum
Titel
02.12.2024 13:15:39
02.12.2024 12:41:41
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender Navigationstipps
Inhaltsverzeichnis

Einlesen von Textdateien mit "open for"

Einlesen von Textdateien mit "open for"
12.08.2008 12:14:21
Textdateien
Hallo zusammen,
ich möchte aus einer 240MB grossen Textdatei die Zeilen raussuchen, die einen bestimmten String enthalten. Dazu habe ich mir unten aufgelistetes Makro geschrieben.
Ich weiss, dass jede Zeile in der Quelldatei mit einem Zeilenumbruch (im Word dieses P zeichen) beendet ist. Ich habe mir gedacht, jede Zeile einzeln in eine Variable zu lesen, diese zu untersuchen und dann eventuell in Datei 2 zu schreiben. Leider aber liest mir der Befehl "Line Input" die ganze Datei in die Variable ein (nicht 998 Zeichen sondern ewig viel mehr).
Wie muss ich das richtig machen, dass ich mein Ziel erreiche?
Vielen Dank für Eure Hilfe!
Gruss
Claus

Sub TxtEinlesen()
Dim DateiName As String
Dim OutputName As String
Dim ZeilenInhalt As String
Dim SuchText As String
SuchText = "0835080563395000"
Open "h:\temp\CCPR" For Input As #1
Open "h:\temp\testCCPR" For Output As #2
Do While Not EOF(1)
Line Input #1, ZeilenInhalt
Cells(1, 1) = Len(ZeilenInhalt) 'habe ich nur zu Testzwecken eingefügt
If Len(ZeilenInhalt) > 16 Then 'sollte die Zeile weniger Zeichen enhalten als der
Suchtext, gibts keinen Fehler
For z = 1 To Len(ZeilenInhalt) - 16
If Mid(ZeilenInhalt, z, 16) = SuchText Then
Print #2, ZeilenInhalt
Exit For
End If
Next z
End If
Loop
Close #1
Close #2
End Sub


11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Einlesen von Textdateien mit "open for"
12.08.2008 12:59:17
Textdateien
Hallo,
das ist nicht nachvollziehbar.
Lad mal einen Schnippsel deiner Textdatei hoch.
Die Schleife For z= 1 to ...
brauchst du nicht. Schau dir mal die InStr-Funktion an.
Gruß
Rudi

AW: Einlesen von Textdateien mit "open for"
12.08.2008 13:27:00
Textdateien
Servus Rudi,
sorry, das ist nicht möglich... Da könnte ich hier ziemlichen Ärger bekommen, wenn ich sensible Daten verschicke, da ich genau diese aus der Datei herauszufiltern ... Vielleicht kann ich Dir die gesuchte Info ja so geben?
Ich habe mal nachgeschaut: Die Zeilen werden im Text-File mit Ascii-Code 10 beendet. Scheinbar erkennt Line Input diesen Code nicht als Zeilenumbruch... Oder was meinst Du?
Die InStr-Funktion ist cool... Merci für den Tip!
Gruss
Claus

Anzeige
AW: Einlesen von Textdateien mit "open for"
12.08.2008 14:31:14
Textdateien
Hallo,
versuchs mal ohne Line.
Input #1, Zeichenfolge
Gruß
Rudi

AW: Einlesen von Textdateien mit "open for"
12.08.2008 14:53:00
Textdateien
Servus Rudi,
Danke für den Tip, aber das Ergebnis ist das gleich... Es wird die ganze Datei in eine Variable gelesen. Bei meinem Testfile gehts noch, aber wenn ich alle Datensätze nehme, wird wohl der Puffer überlaufen...
Gruss
Claus

Anzeige
AW: Einlesen von Textdateien mit "open for"
12.08.2008 15:26:00
Textdateien
Hallo
Probiers mal so wenn ALLE Daten sofort eingelesen werden und in "Zeileninhalt" stehen
Dim tmpArray() as String
tmparray = split(ZeilenInhalt, vbcrlf)
Nun kannst du das Array von oben nach unten durchgehen. Die Datensätze sollten korrekt getrennt sein.
Option Explicit

Sub test()
    Dim myStr As String
    Dim tmpArr() As String
    Dim i As Integer
    myStr = "987897" & Chr$(10) & "987897" & Chr$(10) & "jljlkjlkj987897" & Chr$(10) & "8907897987" & Chr$(10) & "lkjlkjlkJKLJ" & Chr$(10) & "987897"
    tmpArr = Split(myStr, vbCrLf, -1)
    For i = 0 To UBound(tmpArr)
        Debug.Print tmpArr(i)
    Next i
End Sub

Gruss Rainer

Anzeige
AW: Einlesen von Textdateien mit "open for"
12.08.2008 16:21:00
Textdateien
Servus Rainer,
so hatte ich mir das dann auch in etwa gedacht, als Konsequenz daraus, dass chr(10) nicht als Zeilenumbruch interpretiert wird. Allerdings befürchte ich, dass beim Einlesen der gesamten Datein in eine Variable, der Lesepuffer locker überschritten wird (Die GesamtDatei ist etwa 240MB gross)...
Gibt es eine Möglichkeit, die Datei eventuell direkt in einen Array einzulesen? Hmmm...
Mal nachschauen...
Danke für den Tip!
Gruss
Claus

AW: Einlesen von Textdateien mit "open for"
12.08.2008 16:52:00
Textdateien
Hallo
Probier mal folgendes
Sub readBigFile()
    funcImportTextFile "C:\vbcrlf.txt", vbCrLf
End Sub



Function funcImportTextFile(strFullPath As String, deLimiter As String) As Boolean
    'von Florian aus dem Herber Forum
    'modifiziert by Ramses
    'Verweis auf die Microsoft Scripting Runtime muss gesetzt sein
    On Error GoTo ErrHandler
    Dim tmpArr() As String
    Dim myFSO As Object
    Dim myFSOTs As Object
    Dim strActLine As String
    Dim i As Long, tmpCtr As Long
    Dim iRow As Long, iCol As Long
    Set myFSO = CreateObject("scripting.FileSystemObject")
    Set myFSOTs = myFSO.OpenTextFile(strFullPath, ForReading)
    Workbooks.Add 'Wird in eine neue Mappe importiert, kann geändert werden
    'Erste Reihe
    iRow = 1
    'Erste Spalte
    iCol = 1
    'Für den Anwender zum verfolgen
    tmpCtr = 1
    'einlesen starten
    Do Until myFSOTs.AtEndOfStream
        Application.StatusBar = "Datensatz " & tmpCtr & " wird gelesen"
        strActLine = myFSOTs.readline
        tmpArr() = Split(strActLine, deLimiter)
        For i = 0 To UBound(tmpArr)
            Cells(iRow, iCol) = tmpArr(i)
        Next i
        iRow = iRow + 1
        tmpCtr = tmpCtr + 1
        If iRow = Rows.Count Then
            iRow = 1
            iCol = iCol + 1
        End If
    Loop
    errExit:
    Application.StatusBar = False
    Exit Function
    
    ErrHandler:
    MsgBox Err.Number & vbCrLf & Err.Description
    Resume errExit
End Function

Im VB-Editor muss der Verweis auf die "Microsoft Scripting Runtime" gesetzt sein.
Allerdings befürchte ich dass bei 240 MB die 64536 Zeilen nicht ausreichen werden.
Daher habe ich noch die Umsetzung für die Spaltengetrennte Eintragung eingebracht.
Gruss Rainer

Anzeige
AW: Einlesen von Textdateien mit "open for"
12.08.2008 15:55:00
Textdateien
Hallo Claus,
versuch's mal so:

Public Sub b()  
  Dim fso, DieDatei
  Set fso = CreateObject("Scripting.FileSystemObject")  
  Dateiangabe = "e:\test.txt" 'anpassen
  SuchText = "wert" 'anpassen
  Set DieDatei = fso.OpenTextFile(Dateiangabe, 1, False)  
  Do While DieDatei.AtEndOfStream <> True    
    strZeile = DieDatei.ReadLine
    If InStr(1, strZeile, SuchText, vbTextCompare) <> 0 Then Debug.Print strZeile    
  Loop
  DieDatei.Close
End Sub  

mfg Anton

Anzeige
AW: Einlesen von Textdateien mit "open for"
12.08.2008 16:28:13
Textdateien
Servus Anton,
das hat geklappt!!!! Endgeil... und mit einer affenartigen Geschwindigkeit! Super!!! Danke für die Hilfe!!!!
Gruss
Claus

Ich wusste ja dass ich langsam bin :-)...
12.08.2008 16:54:19
Ramses
Hallo
Sorry,... wollte nicht noch was drauflegen, aber wir hatten wohl den gleichen Ansatz
und ich muss den Browswer wohl öfter aktualisieren ;-)
Gruss Rainer

17 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige