Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Textdatei öffnen Werte suchen und auslesen

Forumthread: Textdatei öffnen Werte suchen und auslesen

Textdatei öffnen Werte suchen und auslesen
09.08.2006 11:06:39
Nachtwey
Hallo,
ich habe folgendes Problem. Ich habe einen Auszug von mehreren hundert Dateien. Die Dateinamen sind von der Form "Dateiname####.txt" #### ist eine Zahl zwischen 1000 und 9999.
Ich möchte nun jede Datei öffnen nach bestimmten Sachen durchsuchen und bei einem Treffer das Suchergebniss in Excel kopieren. Die Suche ist glaub ich nicht einmal das primäre Problem. Wie schaffe ich es die Dateinammen hochzuzählen? Ich kenne nur Open "D:\Test.txt" und damit komme ich nicht wirklich weiter.
Vielen Dank
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Textdatei öffnen Werte suchen und auslesen
09.08.2006 11:29:48
u_
Hallo,
mal als Anregung:

Sub tt()
Dim i As Integer, strSuch As String, strTxt As String
strSuch = "Test"
For i = 1000 To 9999
If Dir("d:\Dateiname" & i & ".txt") <> "" Then
Open "d:\Dateiname" & i & ".txt" For Input As #1
Do Until EOF(1)
Line Input #1, strTxt
If InStr(strTxt, strSuch) > 0 Then
'Kopieraktion
End If
Loop
Close 1
End If
Next i
End Sub
Gruß
Lesen gefährdet die Dummheit
Anzeige
AW: Textdatei öffnen Werte suchen und auslesen
09.08.2006 12:02:54
Alexander
Verstehe es nicht so ganz! Er macht auch was nur kopiert er nix nach Excel
'Dim i As Integer, strSuch As String, strTxt As String
'strSuch = "Test"
'- hier lege ich fest was ich Suche als String, ist mir klar
'For i = 1000 To 9999
'If Dir("d:\Dateiname" & i & ".txt") &lt&gt "" Then
' Open "d:\Dateiname" & i & ".txt" For Input As #1
'- Ist klar. Zuerst überprüfe ich ob die Datei überhaupt da ist und wenn Sie da ist wird so geöffnet. Wofür ist aber For Input As #1?
' Do Until EOF(1)
' Line Input #1, strTxt
' If InStr(strTxt, strSuch) &gt 0 Then
'Kopieraktion
' End If
' Loop
'- Diese Schleife verstehe ich nicht ganz.
'- Was ist EOF(1).
'- Line Input #1, strTxt -&gt nur die erste Zeile wird duchsucht?
'- InStr(strTxt, strSuch) -&gt Vergleich des Suchwertes mit dem eingebenen Wert? Was wird da ausgeben?
Danke für deine Hilfe
Anzeige
AW: Textdatei öffnen Werte suchen und auslesen
09.08.2006 12:47:15
u_
Hallo,
Er macht auch was nur kopiert er nix nach Excel
natürlich wird nix kopiert, es fehlt ja die Kopieraktion.
Open "d:\Dateiname" & i & ".txt" For Input As #1
Die Datei wird zum Lesen geöffnet. Das passiert nur im Speicher, ohne dass du die .txt zu sehen bekommst. Wenn du die in Excel öffnen wolltest, könntest du bei so vielen Dateien zwischendrin in Rente gehen.
Do until EOF(1)
mach bis die Datei zu Ende ist (EOF=End of File)
Line Input #1, strTxt
Datei zeilenweise in die Variable strTxt einlesen.
InStr(strTxt, strSuch) - Vergleich des Suchwertes mit dem eingebenen Wert? Was wird da ausgeben?
Die Position von strSuch innerhalb von strTxt als Zahl. Siehe Hilfe zu InStr.
Gruß
Lesen gefährdet die Dummheit
Anzeige
AW: Textdatei öffnen Werte suchen und auslesen
09.08.2006 13:43:11
Alex
Hallo,
dass er nix kopiert war mir logisch, ich war nur verwundert warum er die Datei nicht aufmacht und ich nix sehe. Aber das hat sich ja auch geklärt. Aber nochmal zum kopieren, ich hänge schon wieder etwas. Mit fehlt einfach die Erfahrung im Umgang mit strings. Meine Kopierschleife sieht jetzt wie folgt aus:
Do Until EOF(1)
Line Input #1, strTxt
If InStr(strTxt, strSuch) &gt 0 Then
'Kopieraktion
laR = Cells(Rows.Count, 1).End(xlUp).Row
x = laR + 1
Cells(x, 1) = strTxt
End If
Loop
Close 1
Die Ausgabezeile ist
(Platte R901092011 A; Seite 2+5+6/1+3+4
Ich Suche nach dem Wort Platte, was mich aber eigentlich interessiert ist die Nummer. Habe mir gedacht, dass ich vielleicht nach Platte+Leerzeichen suche und dann sage er soll nur die 10 Stellen danach kopieren. Ich habe aber keinen Schimmer wie das gehen soll. Hast du dafür vielleicht auch ne Idee?
Ich bin echt begeistert wie schnell der Code läuft.
Vielen Dank Vielen Dank
PS: Die Erklärung war echt super, habe es auf der Stelle verstanden.
Anzeige
AW: Textdatei öffnen Werte suchen und auslesen
09.08.2006 13:57:25
u_
Hallo,
normale Textfunktion.
Do Until EOF(1)
Line Input #1, strTxt
intPos = InStr(strTxt, strSuch)
If intPos &gt 0 Then
'Kopieraktion
laR = Cells(Rows.Count, 1).End(xlUp).Row
x = laR + 1
Cells(x, 1) = Mid(strTxt, intPos + 7, 10)
End If
Loop
Close 1
Gruß
Lesen gefährdet die Dummheit
Anzeige
AW: Textdatei öffnen Werte suchen und auslesen
09.08.2006 14:55:37
Alex
Doch schwerer als gedacht! Die Funktion passt für den ersten Wert bestens, aber ich wollte es eigentlich anders auslesen, was beim späteren Auslesen noch wichtig wird. Mein jetziger Code
Do Until EOF(1)
Line Input #1, strTxt
If InStr(strTxt, strSuch1) &gt 0 Or InStr(strTxt, strSuch2) &gt 0 Then
'Kopieraktion
laR = Cells(Rows.Count, 1).End(xlUp).Row
x = laR + 1
Cells(x, 1) = Mid(strTxt, intPos + 9, 10)
If InStr(strTxt, strSuch3) &gt 0 Then
Cells(x, 3) = Left(strTxt, 11)
End If
End If
Loop
Close 1
Aber auch Left oder Right ist nicht die richtige Lösung:
Das Problem ist nicht alle Daten sind gleich. Bei manchen fehlt noch die R900 davor, weil man die einfach weggelassen hat. Ist aber an und für sich kein Problem, da es so wenig sind, die könnte man noch von Hand ändern.
PLATTE 891099 SEITE 4+5+6
Platte R901057072 B; Seite 1+3+6+2+4+5
Im nächsten Schritt will ich aber die Seiten haben. Wenn Seite 1 mit aufgeführt ist bekommt Spalte C den Wert 1 zugeteilt ansonsten den Wert 0, Bei Seite 2 Spalte D den Wert usw. Mit Mid kann ich es aber nicht auslesen da sich der Platz ja verändert, der einzige Vorteil ist das Plus steht immer dazwischen.
Hast du ne Idee.
Anzeige
AW: Textdatei öffnen Werte suchen und auslesen
09.08.2006 15:06:44
Alex
Doch schwerer als gedacht! Die Funktion passt für den ersten Wert bestens, aber ich wollte es eigentlich anders auslesen, was beim späteren Auslesen noch wichtig wird. Mein jetziger Code
Do Until EOF(1)
Line Input #1, strTxt
If InStr(strTxt, strSuch1) &gt 0 Or InStr(strTxt, strSuch2) &gt 0 Then
'Kopieraktion
laR = Cells(Rows.Count, 1).End(xlUp).Row
x = laR + 1
Cells(x, 1) = Mid(strTxt, intPos + 9, 10)
If InStr(strTxt, strSuch3) &gt 0 Then
Cells(x, 3) = Left(strTxt, 11)
End If
End If
Loop
Close 1
Aber auch Left oder Right ist nicht die richtige Lösung:
Das Problem ist nicht alle Daten sind gleich. Bei manchen fehlt noch die R900 davor, weil man die einfach weggelassen hat. Ist aber an und für sich kein Problem, da es so wenig sind, die könnte man noch von Hand ändern.
PLATTE 891099 SEITE 4+5+6
Platte R901057072 B; Seite 1+3+6+2+4+5
Im nächsten Schritt will ich aber die Seiten haben. Wenn Seite 1 mit aufgeführt ist bekommt Spalte C den Wert 1 zugeteilt ansonsten den Wert 0, Bei Seite 2 Spalte D den Wert usw. Mit Mid kann ich es aber nicht auslesen da sich der Platz ja verändert, der einzige Vorteil ist das Plus steht immer dazwischen.
Hast du ne Idee.
Anzeige
AW: Textdatei öffnen Werte suchen und auslesen
09.08.2006 15:44:36
u_
Hallo,
wie ist denn der genaue Satzaufbau?
hierbei Platte R901092011 A; Seite 2+5+6/1+3+4 ist noch ein / dazwischen
Gruß
Lesen gefährdet die Dummheit
AW: Textdatei öffnen Werte suchen und auslesen
09.08.2006 16:06:17
Alex
Das ganze ist aus einer Archivdatei und wurde leider nicht immer ganz konsisitent gemacht.
Normal sollte es so aussehen
(Platte R901118696 A; Seite 1+5+6/1+2+4
es sieht aber auch von
(PLATTE 754696 SEITE B+E
bis
(Platte R901118696-A; Seite 1+5+6/1+2+4
oder
(Platte R901118696-A; Seite 1+5 wenn nur 2 Seiten bearbeitet werden.
Am Ende möchte ich in Excel eine binäre Matrix haben. 0 Seite nicht bearbeitet 1 Seite bearbeitet.
Aber Platte steht immer davor und Seite auch.
Ich habe mir auch schon über legt ob ich vielleicht erst den Strin einlesen sollten und danach durchsuchen sollte ob ein Wert ist und dann soll er in der betreffenden Spalte ein Kreuz machen. Aber auch das ist nicht so einfach.
Ich bräuchte halt etwas wie Schaue ob es ein Zahlenwert ist wenn kein Zahlenwert mehr stoppe mit auslesen.
Bei den Seiten Schaue ob Zahlenwert = 1 oder 2 oder 3 ... ist und schreibe ihn in die entsprechende Spalte.
Das Problem ist halt das die Werte nicht wirklich fest im String sind. Und deswegen scheitere ich mit MID oder ähnlichen.
Anzeige
AW: Textdatei öffnen Werte suchen und auslesen
09.08.2006 16:40:50
u_
Hallo,
hier mal ein Versuch:
iPos = InStr(strTxt, "Platte")
If iPos &gt 0 Then
strPlatte = Mid(strTxt, iPos + 7, 10)
iPos = InStr(strTxt, "Seite")
strSeite = Mid(strTxt, iPos, 255)
strSeite = Replace(strSeite, "Seite", "")
strSeite = Replace(strSeite, "+", "")
strSeite = Trim(Replace(strSeite, "/", ""))
With Sheets(1).Cells(65536, 1).End(xlUp)
.Offset(1, 0) = strPlatte
For iPos = 1 To Len(strSeite)
vntSeite = Mid(strSeite, iPos, 1)
If IsNumeric(vntSeite) Then
.Offset(1, vntSeite) = 1
Else
.Offset(1, Asc(UCase(vntSeite)) - 64) = 1
End If
Next
End With
End If
Gruß
Lesen gefährdet die Dummheit
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Textdatei öffnen und Werte in Excel auslesen


Schritt-für-Schritt-Anleitung

Um eine .text-datei zu öffnen und Werte auszulesen, kannst Du den folgenden VBA-Code verwenden. Der Code öffnet Textdateien mit Namen im Format "Dateiname####.txt" und sucht nach einem bestimmten Begriff. Führe die Schritte aus:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Klicke auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.
  3. Füge den folgenden Code ein:
Sub TextdateiOeffnen()
    Dim i As Integer, strSuch As String, strTxt As String
    strSuch = "Test" ' Suchbegriff festlegen
    For i = 1000 To 9999
        If Dir("D:\Dateiname" & i & ".txt") <> "" Then
            Open "D:\Dateiname" & i & ".txt" For Input As #1
            Do Until EOF(1)
                Line Input #1, strTxt
                If InStr(strTxt, strSuch) > 0 Then
                    ' Kopieraktion
                    Dim laR As Long
                    laR = Cells(Rows.Count, 1).End(xlUp).Row + 1
                    Cells(laR, 1) = strTxt ' Wert in die erste Spalte kopieren
                End If
            Loop
            Close #1
        End If
    Next i
End Sub
  1. Ändere den Suchbegriff in der Zeile strSuch = "Test" nach Deinen Bedürfnissen.
  2. Führe das Makro aus, um die .text-dateien zu öffnen und die Werte auszulesen.

Häufige Fehler und Lösungen

  • Fehler: "Datei nicht gefunden"

    • Stelle sicher, dass der Pfad zu den Textdateien korrekt ist und die Dateien tatsächlich existieren.
  • Fehler: "Kopieraktion nicht definiert"

    • Überprüfe, ob die Kopieraktion korrekt implementiert ist. Im obigen Beispiel wird der Text in die erste Spalte kopiert.
  • Problem: Der Suchbegriff wird nicht gefunden

    • Achte darauf, dass der Suchbegriff exakt mit dem in der .text-datei übereinstimmt.

Alternative Methoden

Eine Möglichkeit, .textdateien zu öffnen, ist die Verwendung von Power Query in Excel:

  1. Gehe zu Daten und klicke auf Daten abrufen -> Aus Datei -> Aus Text/CSV.
  2. Wähle die gewünschte .textdatei aus und folge den Anweisungen, um die Daten zu importieren.

Mit Power Query kannst Du auch die Daten transformieren und filtern, bevor Du sie in ein Excel-Arbeitsblatt lädst.


Praktische Beispiele

Hier sind einige Beispiele für die Anpassung des Codes:

  • Extraktion eines spezifischen Wertes: Wenn Du einen bestimmten Wert nach "Platte" extrahieren möchtest, kannst Du den folgenden Code verwenden:
If InStr(strTxt, "Platte") > 0 Then
    Cells(laR, 1) = Mid(strTxt, InStr(strTxt, "Platte") + 7, 10)
End If
  • Umgang mit verschiedenen Formaten: Wenn die Formate der Textdateien unterschiedlich sind, kannst Du zusätzliche Bedingungen einfügen, um die relevanten Werte zu extrahieren.

Tipps für Profis

  • Nutze Option Explicit, um sicherzustellen, dass alle Variablen deklariert sind. Das hilft, Fehler zu vermeiden.
  • Verwende Error Handling, um den Code robuster zu machen. Beispielsweise kannst Du On Error Resume Next verwenden, um Fehler zu ignorieren.
  • Erweitere die Suchlogik, um mehrere Suchbegriffe gleichzeitig zu verarbeiten.

FAQ: Häufige Fragen

1. Frage Wie kann ich mehrere Suchbegriffe gleichzeitig verwenden?

Antwort: Du kannst eine If-Bedingung mit Or verwenden, um mehrere Begriffe zu überprüfen:

If InStr(strTxt, strSuch1) > 0 Or InStr(strTxt, strSuch2) > 0 Then
    ' Kopieraktion
End If

2. Frage Wie kann ich die Daten in ein anderes Arbeitsblatt kopieren?

Antwort: Ändere die Referenz auf Sheets("DeinBlattname").Cells(...), um die Daten in ein bestimmtes Arbeitsblatt zu kopieren.

3. Frage Kann ich den Code für andere Dateitypen anpassen?

Antwort: Ja, der Code kann leicht angepasst werden, um andere Dateitypen zu öffnen. Ändere einfach die Dateiendung in der Dir-Funktion und beim Öffnen der Datei.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige