Microsoft Excel

Herbers Excel/VBA-Archiv

bestimmte Zeilen aus TXT Datei einlesen | Herbers Excel-Forum


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

 DEF
11 Bis 1920 bis 44122 bis 132
21333-XYZSDDGTZ100
31444 XYZPNLLO200
41555EBSS300


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4

Die Anzahl der Zeilen ist nicht größer als 65536.

Ich hoffe, dass mir jemand helfen kann.

Vielen Dank im Voraus!

MFG Andre

  

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

 DEF
11 Bis 1986 bis 94122 bis 132
21333-XYZSDDGTZ100
31444 XYZPNLLO200
41555EBSS300


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4



MFG Andre


  

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 Sub
Gruß 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

 ABCD
11 Bis 1986 Bis 94122 Bis 132 
21333-XYZ           SDDGTZ         uuu<-- 7 Leerzeichen davor enthalten
31444 XYZ           PNLLO   200 
41555EBSS    300 


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4



Kann man das noch glätten, dass immer linke und rechte Leerzeichen entfernt werden falls vorhanden?

MFG Andre


  

Betrifft: noch Bsp. von: Andre ´
Geschrieben am: 11.11.2009 17:57:18



Tabelle2

 ABC
11 Bis 19  
21333-XYZ           19normal dürften nur 8 Zeichen enthalten sein
3  die 11 Leerzeichen rechts nach dem Text sollen nicht mit angezeigt werden

Formeln der Tabelle
ZelleFormel
B2=LÄNGE(A2)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4


  

Betrifft: mit Trim selber gelöst nochmals Vielen Dank oT von: Andre´
Geschrieben am: 11.11.2009 20:32:54




Beiträge aus den Excel-Beispielen zum Thema "bestimmte Zeilen aus TXT Datei einlesen"