Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
788to792
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
788to792
788to792
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

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

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
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
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

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige