Betrifft: bestimmte Zeilen aus TXT Datei einlesen
von: Andre´
Geschrieben am: 11.11.2009 10:50:59
Hallo alle zusammen,
Ich habe eine TXT Datei https://www.herber.de/bbs/user/65766.txt
wo folgendes ausgelesen werden soll.
Es sollen nur die Daten aus TXT Datei (Pfad: C:\Test.txt) in Array eingelesen werden, wenn folgende Bedingung erfüllt ist:
zwischen der 86 bis 94 Stelle muss etwas enthalten sein außer Minus, Leerzeichen und Zahlen.
Wenn diese Bedingung erfüllt ist dann soll aus der Zeile alles was zwischen
1 Bis 19, 20 bis 44 und 122 bis 132 jeweils enthalten ist eingelesen werden.
Wenn alle Zeilen geprüft wurden, dann soll die Daten wie folgt in das aktuelle Tabellenblatt beginnend ab Zelle D2 eingefügt werden.
Dieses Darstellung zeigt auch, welche Zeilen aus der TXT Datei die Bedingung erfüllt haben. (Zeile 10, 13, und 17)
Tabelle1
D | E | F | |
1 | 1 Bis 19 | 20 bis 44 | 122 bis 132 |
2 | 1333-XYZ | SDDGTZ | 100 |
3 | 1444 XYZ | PNLLO | 200 |
4 | 1555 | EBSS | 300 |
Betrifft: AW: bestimmte Zeilen aus TXT Datei einlesen
von: Luschi
Geschrieben am: 11.11.2009 11:08:16
Hallo Andre,
irgendetwas kann in der Beschreibung nicht stimmen:
In der Zeile 10 beginnt die Textkette 'SDDGTZ' nicht an Position 20 sondern an Position 86.
Lt. Deiner Tabelle aber an Position 20 bis 44.
Bitte gebe hier Klarheit!
Gruß von Luschi
aus klein-Paris
Betrifft: AW: bestimmte Zeilen aus TXT Datei einlesen
von: Andre´
Geschrieben am: 11.11.2009 11:16:23
Hallo Luschi,
hast Recht zwischen
1 Bis 19, 86 bis 94 und 122 bis 132 ist gemeint
Tabelle1
D | E | F | |
1 | 1 Bis 19 | 86 bis 94 | 122 bis 132 |
2 | 1333-XYZ | SDDGTZ | 100 |
3 | 1444 XYZ | PNLLO | 200 |
4 | 1555 | EBSS | 300 |
Betrifft: AW: bestimmte Zeilen aus TXT Datei einlesen
von: IngGi
Geschrieben am: 11.11.2009 16:11:06
Hallo André,
versuch's mal so:
Sub Einlesen() Dim vntDaten As Variant ReDim vntDaten(2, 0) Dim vntAusgabe As Variant Dim strZeile As String Dim intZeichen As Integer Dim intFF As Integer Dim lngZeile As Long Dim lngSpalte As Long 'Textdatei zum Einlesen öffnen intFF = FreeFile Open "C:\Temp\Test.txt" For Input As #intFF 'Kopfzeilen der Datei übergehen For lngZeile = 1 To 6 Line Input #intFF, strZeile Next 'lngZeile 'Bis Dateiende zeilenweise einlesen Do Until EOF(intFF) 'Eine Zeile einlesen Line Input #intFF, strZeile 'Prüfen, ob Leerzeile - dann nicht tun If Len(strZeile) >= 94 Then 'Prüfen, ob etwas ausser Blank, Minuszeichen und Ziffern vorhanden For intZeichen = 86 To 94 If Asc(Mid(strZeile, intZeichen, 1)) <> 32 And _ Asc(Mid(strZeile, intZeichen, 1)) <> 45 And _ (Asc(Mid(strZeile, intZeichen, 1)) < 48 Or _ Asc(Mid(strZeile, intZeichen, 1)) > 57) Then 'Drei Spalten an Datenfeld übergeben vntDaten(0, UBound(vntDaten, 2)) = Left(strZeile, 19) vntDaten(1, UBound(vntDaten, 2)) = Mid(strZeile, 86, 9) vntDaten(2, UBound(vntDaten, 2)) = Mid(strZeile, 122, 11) 'Datenfeld um eine Zeile erweitern ReDim Preserve vntDaten(2, UBound(vntDaten, 2) + 1) 'Bearbeitung der Zeile abschließen und zur nächsten Zeile gehen Exit For End If Next 'intZeichen End If Loop 'Textdatei schließen Close #intFF 'Datenfeld transponieren und dabei die Dimensionierung der Zeile 'um die letzte (leere) Position kürzen. 'Das Datenfeld muss für eine direkte Ausgabe in einen Zellbereich 'transponiert werden, da hierbei die Zeilendimension an erster 'Stelle stehen muss. ReDim vntAusgabe(UBound(vntDaten, 2) - 1, 2) For lngZeile = 0 To UBound(vntDaten, 2) - 1 For lngSpalte = 0 To 2 vntAusgabe(lngZeile, lngSpalte) = vntDaten(lngSpalte, lngZeile) Next 'lngSpalte Next 'lngZeile 'Ausgabe auf aktives Tabellenblatt Range("A1") = "1 Bis 19" Range("B1") = "86 Bis 94" Range("C1") = "122 Bis 132" Range("A2").Resize(UBound(vntAusgabe, 1) + 1, _ UBound(vntAusgabe, 2) + 1) = vntAusgabe End SubGruß Ingolf
Betrifft: AW: bestimmte Zeilen aus TXT Datei einlesen
von: Andre ´
Geschrieben am: 11.11.2009 17:47:17
Hallo Ingolf,
Danke für Deine Antwort, das funktioniert ganz gut.
Ich habe noch:
vntDaten(1, UBound(vntDaten, 2)) = Mid(strZeile, 86, 9) mit 8
und
vntDaten(2, UBound(vntDaten, 2)) = Mid(strZeile, 122, 11) mit 10 getauscht
Ein Problem habe ich noch:
Wenn zwischen 122 bis 132 ein Text steht, dann werden die Leerzeichen zuvor mit eingelesen. Dazu habe ich in der Zeile 10 zwischen 122 bis 132 die "100" durch "uuu" ersetzt.
Siehe Bsp:
Tabelle2
A | B | C | D | |
1 | 1 Bis 19 | 86 Bis 94 | 122 Bis 132 | |
2 | 1333-XYZ | SDDGTZ | uuu | <-- 7 Leerzeichen davor enthalten |
3 | 1444 XYZ | PNLLO | 200 | |
4 | 1555 | EBSS | 300 |
Betrifft: noch Bsp.
von: Andre ´
Geschrieben am: 11.11.2009 17:57:18
Tabelle2
A | B | C | |
1 | 1 Bis 19 | ||
2 | 1333-XYZ | 19 | normal dürften nur 8 Zeichen enthalten sein |
3 | die 11 Leerzeichen rechts nach dem Text sollen nicht mit angezeigt werden |
Formeln der Tabelle | ||||
|
Betrifft: mit Trim selber gelöst nochmals Vielen Dank oT
von: Andre´
Geschrieben am: 11.11.2009 20:32:54