VisualBasic Pobleme bei .txt einlesen

sens.sash

Lt. Junior Grade
Registriert
März 2005
Beiträge
398
Hallo Forenuser,

und schonmal danke für eure Hilfe bei folgendem Problem.

Ich würde gerne eine .txt Datei einlesen die folgendes Format hat:

Code:
123456         01113104605399  5N08530381 01 1106M8 123456         28.02.2013 00X   158291 00                     7,00
                                       Satz
123456         01113104717703  5N08530381 01 1106M8 123456         05.03.2013 00X   158291 00                     7,00
                                       Satz
123456         01113104717707  5N0853059B 01 1106M8 123456         05.03.2013 00X   158291 00                     7,00
                                       Satz

Jetzt habe ich folgenden Code:

Code:
 Public Sub Textdatei_einlesenST470()
Dim FName As String, Path, Path_verarbeitet As String, i As Long, Zeile As String
Dim Spalte() As String
Dim fso As Object
Dim rs As New ADODB.Recordset

rs.Open "tbl_quelle", CurrentProject.Connection, adOpenKeyset, adLockOptimistic

Set fso = CreateObject("Scripting.FileSystemObject")


Path = "C:\Users\***\Desktop\Datenbank\unbearbeitet\"                   '!Quellpfad!
Path_verarbeitet = "C:\Users\***\Desktop\Datenbank\bearbeitet\"        '!Zielpfad!

FName = Dir(Path & "*.txt")
Do While FName <> ""
  Open Path & FName For Input As #1
  Line Input #1, Zeile
  While Not EOF(1)
   Line Input #1, Zeile
      
   Spalte() = Split(Zeile, "#")


Problem bei
Code:
Spalte() = Split(Zeile, " ")
weil die Spalten unterschiedliche Längen haben und bei
Code:
While Not EOF(1)
weil die .txt Datei aller 10 Datensätze 3 Absätze macht.

Kann einer helfen?

Danke!
 
Bei erstem Problem würde ich entweder die Zeilen mitzählen und einfach per Modulo bestimmen, ob die Zeile verarbeitet wird oder nicht. Also wenn immer in geraden/ungeraden Zeilennummern dieses " Satz" steht geht das so. Alternativ prüfen, ob das erste Zeichen der Zeile alphanummerisch ist.

Bei dem zweiten Problem kann ich keine Lösung bieten, aber ich finde für diese Situation den Ansatz aus der Lösung aus Post #3 von http://www.office-loesung.de/ftopic314408_0_0_asc.php sinnvoller. Erst alles als ein String lesen, nach Zeilenende splitten und dann nach Leerzeichen um an die Einzelwerte zu gelangen.
 
Bei erstem Problem würde ich entweder die Zeilen mitzählen und einfach per Modulo bestimmen, ob die Zeile verarbeitet wird oder nicht. Also wenn immer in geraden/ungeraden Zeilennummern dieses " Satz" steht geht das so. Alternativ prüfen, ob das erste Zeichen der Zeile alphanummerisch ist.

Die Idee finde ich super. Ich kann sogar nach dem Anfangsbuchstaben M suchen, weil alle betracheten mit M beginnen.

Code:
 If Left(Spalte, 1) = M Then

Hier kommt aber jetzt der Fehler, dass der Befehl nicht ausgeführt werden kann...
Weißt du weshalb?

fehler1.png
 
Zuletzt bearbeitet:
Kann es sein, dass bei dir die Quotes um M fehlen? Außerdem müsstest du im Left() die Variable "Zeile" verwenden, da die Spalten erst gesplittet werden können, wenn sie als splitbar erkannt wurden.
Wenn das nicht klappt, mal diesen Aufruf probieren:
Code:
If Microsoft.VisualBasic.Left(Zeile, 1) = "M" Then
 
So gings jetzt am besten:

Zeichen für Zeichen.

Code:
Debug.Print Zeile
  If Left(Zeile, 2) = "M8" Then
  Spalte() = Array(Mid(Zeile, 32, 25), Mid(Zeile, 67, 7), Mid(Zeile, 75, 10), Right(Zeile, 10)) 'Split(Zeile, " ")
  
                                                                                                                                            '1.Zeile
   rs.AddNew
   rs!SN = Trim(Spalte(0))
   rs!Behtyp = Trim(Spalte(1))
   rs!Datum = DateValue(Spalte(2))
   rs!Menge = CDbl(Trim(Replace(Spalte(3), ",00", "")))
   rs.Update


Kennt sich jemand mit dem Fehler auf dem Bild aus?Fehler.png
 
Zurück
Oben