Textfelder aus Textfile jeweils einzeln in einen Datensatz einlesen
Liebe Administrator-Gemeinde,
ich muss aus einer Edifact-Datei (Textfile) Daten in eine Access-Tabelle importieren.
Beispiel des Aufbaus der Edifact-Datei:
'ABC:123'DEF:456'GHI789'JKL125lk'MNO+:adf45'PIA+5+F50:SA:108:91'PIA+5+F50:SA:108:92'IMD+E++:108' .........
...............'ABC:123'DEF:789'GHI345'JKL204lk'MNO+:cdk76'.....................................................................................................
Die einzelnen Datenfelder sind also durch ein Hochkomma (') getrennt und werden ohne Zwischenraum und ohne Zeilenumbruch aneinandergefügt.
Die Dateien enthalten weit über 10.000 Zeilen.
Um diese Daten einigermaßen lesbar zu machen, sollen die Datenfelder in eine Access-Tabelle (tabImport) derart importiert werden, dass die einzelnenDatenfelder in einer einzigen Spalte jeweils als neuer Datensatz erscheinen.
Also So: ID Spalte
1 'ABC:123
2 'DEF:456
3 'GHI789
4 'JKL125lk
5 ............
6 .............
Hab das Problem schon auf verschiedene Weise zu lösen versucht, bin aber noch auf keine brauchbare Lösung gestoßen.
Die Misere liegt darin, dass Access beim Textimport zwar automatisch das Hochkomma(') als Feldtrennzeichen erkennt, ich aber bisher noch keine Funktion gefunden habe, die dieses Feldtrennzeichen als Zeichen für einen neuen Datensatz interpretiert.
Ersatzweise könnte man die Quelldatei vielleicht bereits vor dem Einlesen entsprechend aufbereiten (Für jedes Feld eine neue Zeile), dann klappt nämlich der Import in Access einwandfrei.
Vielleicht hat von Euch jemand eine passende Lösung parat. Ich bin für jede Anregung dankbar. Für eure Mühe bedanke ich mich im Voraus!
ich muss aus einer Edifact-Datei (Textfile) Daten in eine Access-Tabelle importieren.
Beispiel des Aufbaus der Edifact-Datei:
'ABC:123'DEF:456'GHI789'JKL125lk'MNO+:adf45'PIA+5+F50:SA:108:91'PIA+5+F50:SA:108:92'IMD+E++:108' .........
...............'ABC:123'DEF:789'GHI345'JKL204lk'MNO+:cdk76'.....................................................................................................
Die einzelnen Datenfelder sind also durch ein Hochkomma (') getrennt und werden ohne Zwischenraum und ohne Zeilenumbruch aneinandergefügt.
Die Dateien enthalten weit über 10.000 Zeilen.
Um diese Daten einigermaßen lesbar zu machen, sollen die Datenfelder in eine Access-Tabelle (tabImport) derart importiert werden, dass die einzelnenDatenfelder in einer einzigen Spalte jeweils als neuer Datensatz erscheinen.
Also So: ID Spalte
1 'ABC:123
2 'DEF:456
3 'GHI789
4 'JKL125lk
5 ............
6 .............
Hab das Problem schon auf verschiedene Weise zu lösen versucht, bin aber noch auf keine brauchbare Lösung gestoßen.
Die Misere liegt darin, dass Access beim Textimport zwar automatisch das Hochkomma(') als Feldtrennzeichen erkennt, ich aber bisher noch keine Funktion gefunden habe, die dieses Feldtrennzeichen als Zeichen für einen neuen Datensatz interpretiert.
Ersatzweise könnte man die Quelldatei vielleicht bereits vor dem Einlesen entsprechend aufbereiten (Für jedes Feld eine neue Zeile), dann klappt nämlich der Import in Access einwandfrei.
Vielleicht hat von Euch jemand eine passende Lösung parat. Ich bin für jede Anregung dankbar. Für eure Mühe bedanke ich mich im Voraus!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 169776
Url: https://administrator.de/forum/textfelder-aus-textfile-jeweils-einzeln-in-einen-datensatz-einlesen-169776.html
Ausgedruckt am: 10.04.2025 um 06:04 Uhr
11 Kommentare
Neuester Kommentar
Hallo wiuwiu,
es wäre natürlich kein Problem ein VBScript zu schreiben, das die gewünschte Aufteilung der einzelnen Datensätze auf jeweils eine Zeile vornimmt. Es stellt sich aber auch die Frage, ob die Export-Software nicht bereits die Möglichkeit bietet, die Daten in einem besser strukturierten Format zu exportieren.
Für die VBScript-Lösung tauchen aber auch noch Fragen auf:
Gruß
Friemler
es wäre natürlich kein Problem ein VBScript zu schreiben, das die gewünschte Aufteilung der einzelnen Datensätze auf jeweils eine Zeile vornimmt. Es stellt sich aber auch die Frage, ob die Export-Software nicht bereits die Möglichkeit bietet, die Daten in einem besser strukturierten Format zu exportieren.
Für die VBScript-Lösung tauchen aber auch noch Fragen auf:
- Gibt es wirklich keine Zeilenumbrüche in der Export-Datei? Du schreibst ja auch von "weit über 10000 Zeilen".
- Wenn die Datei/jede einzelne Zeile mit einem Hochkomma anfängt und endet, würde die VBScript-Funktion
Split
dadurch jeweils eine leere Zeile in der Ausgabedatei erzeugen. Kann man nun davon ausgehen, dass sonst nirgends leere Datensätze in der Export-Datei vorkommen (zwei aufeinander folgende Hochkommas) und könnte somit durch eine Abfrage verhindern, dass leere Zeilen in die Ausgabedatei geschrieben werden, oder müsste man eine Sonderbehandlung für "Hochkomma am Datei-/Zeilenanfang oder -ende" einführen? - Was ist, wenn ein Datensatz selbst ein Hochkomme enthält? Das muss ja dann irgendwie "escaped" werden. Wie macht das die Exportsoftware? Oder kommt das nicht vor?
Gruß
Friemler
für den anfang:
lad dir ultraedit
öffne das file mit ultraedit drücke strg+r (ersetzen)
suche nach '
ersetzen durch zeilenumbruch (strg+enter)
habs grade mal ausprobiert mit deinem beispiel:
'ABC:123'DEF:456'GHI789'JKL125lk'MNO+:adf45'PIA+5+F50:SA:108:91'PIA+5+F50:SA:108:92'IMD+E++:108' =
ABC:123
DEF:456
GHI789
JKL125lk
MNO+:adf45
PIA+5+F50:SA:108:91
PIA+5+F50:SA:108:92
IMD+E++:108
grüße!
lad dir ultraedit
öffne das file mit ultraedit drücke strg+r (ersetzen)
suche nach '
ersetzen durch zeilenumbruch (strg+enter)
habs grade mal ausprobiert mit deinem beispiel:
'ABC:123'DEF:456'GHI789'JKL125lk'MNO+:adf45'PIA+5+F50:SA:108:91'PIA+5+F50:SA:108:92'IMD+E++:108' =
ABC:123
DEF:456
GHI789
JKL125lk
MNO+:adf45
PIA+5+F50:SA:108:91
PIA+5+F50:SA:108:92
IMD+E++:108
grüße!
Hallo Wiuwiu,
mit Export-Software meinte ich kein spezielles Programm, sondern eben das Programm, aus dem die Daten exportiert werden. Gute Programme bieten da eine gewisse Freiheit bzgl. des Export-Formats. Oder soll etwa direkt die Datendatei des Programms bearbeitet werden?
Any way, hier mal ein Script, das Dir helfen sollte:
Wegen der großen Datenmenge wird die Eingabedatei nur zeichenweise eingelesen. Der von Dir erwähnte Header wird überlesen. Jedes Hochkomma erzeugt einen Zeilenumbruch in der Ausgabedatei (außer dem ersten, direkt nach dem Header). Ich bin davon ausgegangen, dass die Datei nicht mit einem Hochkomma endet, sondern nur jeder Datensatz damit beginnt.
Du kannst das Icon der Eingabedatei auf das Icon des obigen Scripts ziehen.
Als Ausgabedatei entsteht eine neue Datei, deren Name aus dem Namen der Eingabedatei, ergänzt um "_Neu", besteht (aus
Gruß
Friemler
mit Export-Software meinte ich kein spezielles Programm, sondern eben das Programm, aus dem die Daten exportiert werden. Gute Programme bieten da eine gewisse Freiheit bzgl. des Export-Formats. Oder soll etwa direkt die Datendatei des Programms bearbeitet werden?
Any way, hier mal ein Script, das Dir helfen sollte:
Const ForReading = 1
Const ForWriting = 2
If WScript.Arguments.Count > 0 Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
'Dateipfad in die Bestandteile Pfad, Dateiname und -erweiterung aufteilen
strFilePath = objFSO.GetParentFolderName(WScript.Arguments(0))
strFileName = objFSO.GetBaseName(WScript.Arguments(0))
strFileExt = objFSO.GetExtensionName(WScript.Arguments(0))
'Eingabedaei zum lesen öffnen
Set objInFile = objFSO.OpenTextFile(WScript.Arguments(0), ForReading, False)
'Ausgabedatei zum schreiben öffnen
'Den Dateinamen dabei um "_Neu" ergänzen
Set objOutFile = objFSO.OpenTextFile(objFSO.BuildPath(strFilePath, strFileName & "_Neu" & "." & strFileExt), ForWriting, True)
'Header überlesen
Do While (Not objInFile.AtEndOfStream) And (objInFile.Read(1) <> "'")
Loop
'Eingabedatei zeichenweise einlesen
'Ausgabedatei zeichenweise schreiben
'Wenn ein Hochkomma gelesen wurde, einen Zeilenumbruch schreiben
While Not objInFile.AtEndOfStream
strChar = objInFile.Read(1)
If strChar <> "'" Then
objOutFile.Write strChar
Else
objOutFile.Write vbCRLF
End If
Wend
'Letzte Zeile der Ausgabedatei mit einem Zeilenumbruch abschließen
objOutFile.Write vbCRLF
objOutFile.Close
objInFile.Close
End If
Wegen der großen Datenmenge wird die Eingabedatei nur zeichenweise eingelesen. Der von Dir erwähnte Header wird überlesen. Jedes Hochkomma erzeugt einen Zeilenumbruch in der Ausgabedatei (außer dem ersten, direkt nach dem Header). Ich bin davon ausgegangen, dass die Datei nicht mit einem Hochkomma endet, sondern nur jeder Datensatz damit beginnt.
Du kannst das Icon der Eingabedatei auf das Icon des obigen Scripts ziehen.
Als Ausgabedatei entsteht eine neue Datei, deren Name aus dem Namen der Eingabedatei, ergänzt um "_Neu", besteht (aus
Daten.txt
wird Daten_Neu.txt
).Gruß
Friemler