Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Textfelder aus Textfile jeweils einzeln in einen Datensatz einlesen

Mitglied: wiuwiu

wiuwiu (Level 1) - Jetzt verbinden

14.07.2011 um 19:28 Uhr, 5537 Aufrufe, 11 Kommentare

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!
Mitglied: Friemler
14.07.2011 um 20:25 Uhr
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:
  1. Gibt es wirklich keine Zeilenumbrüche in der Export-Datei? Du schreibst ja auch von "weit über 10000 Zeilen".
  2. 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?
  3. 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
Bitte warten ..
Mitglied: cse
14.07.2011 um 20:32 Uhr
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!
Bitte warten ..
Mitglied: cse
14.07.2011 um 20:34 Uhr
jo hab mir auch gedacht, dass die exportsoftwar sowas hergeben müsste ;)
Bitte warten ..
Mitglied: wiuwiu
14.07.2011 um 23:03 Uhr
Hallo Friemler,

Vielen Dank für die schnelle Antwort.
Es gibt hierzu keine spezielle Export-Software, ich kann die Datei lediglich im Editor öffnen.

Zu 1. Es gibt tatsächlich keine Zeilenumbrüche. Die weit über 10000 Zeilen (geschätzt) bezogen sich lediglich auf die Ansicht im Editor

Zu 2. Der Dateiinhalt beginnt mit dem Code "UNA:+.? " (ohne Anführungszeichen) . Darauf folgen jeweils nur durch ein Hochkomma getrennt die Datenfelder. Es gibt auch keine leeren Datensätze. Wenn die Datenbezeichnung keinen Wert enthält, wird das ganze Feld incl. Hochkomma gar nicht aufgeführt. Die Datei endet dann mit dem letzten Datenfeld (wieder mit einem Hochkomma). Ich müsste somit den gesamten Dateiinhalt (ca. 3,5 MB!) als einen String einlesen und ihn dann splitten. Da steigt allerdings der Rechner aus.

Zu 3. Im Datensatz selbst erscheint kein Hochkomma, so dass wenigstens dieses Problem nicht auftaucht.

Gruß
Wiuwiu
Bitte warten ..
Mitglied: Friemler
14.07.2011 um 23:24 Uhr
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:
01.
Const ForReading = 1 
02.
Const ForWriting = 2 
03.
 
04.
 
05.
If WScript.Arguments.Count > 0 Then 
06.
  Set objFSO = CreateObject("Scripting.FileSystemObject") 
07.
 
08.
  'Dateipfad in die Bestandteile Pfad, Dateiname und -erweiterung aufteilen 
09.
  strFilePath = objFSO.GetParentFolderName(WScript.Arguments(0)) 
10.
  strFileName = objFSO.GetBaseName(WScript.Arguments(0)) 
11.
  strFileExt  = objFSO.GetExtensionName(WScript.Arguments(0)) 
12.
 
13.
  'Eingabedaei zum lesen öffnen 
14.
  Set objInFile = objFSO.OpenTextFile(WScript.Arguments(0), ForReading, False) 
15.
 
16.
  'Ausgabedatei zum schreiben öffnen 
17.
  'Den Dateinamen dabei um "_Neu" ergänzen 
18.
  Set objOutFile = objFSO.OpenTextFile(objFSO.BuildPath(strFilePath, strFileName & "_Neu" & "." & strFileExt), ForWriting, True) 
19.
 
20.
  'Header überlesen 
21.
  Do While (Not objInFile.AtEndOfStream) And (objInFile.Read(1) <> "'") 
22.
  Loop 
23.
 
24.
  'Eingabedatei zeichenweise einlesen 
25.
  'Ausgabedatei zeichenweise schreiben 
26.
  'Wenn ein Hochkomma gelesen wurde, einen Zeilenumbruch schreiben 
27.
  While Not objInFile.AtEndOfStream 
28.
    strChar = objInFile.Read(1) 
29.
 
30.
    If strChar <> "'" Then 
31.
      objOutFile.Write strChar 
32.
    Else 
33.
      objOutFile.Write vbCRLF 
34.
    End If 
35.
  Wend 
36.
 
37.
  'Letzte Zeile der Ausgabedatei mit einem Zeilenumbruch abschließen 
38.
  objOutFile.Write vbCRLF 
39.
 
40.
  objOutFile.Close 
41.
  objInFile.Close 
42.
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
Bitte warten ..
Mitglied: wiuwiu
14.07.2011 um 23:41 Uhr
Hallo CSE,

vielen Dank für den Tip, haut wunderbar hin.
Irgendwas mach ich allerdings wohl falsch. Ultraedit macht einen Zeilenumbruch, schreibt aber das Wort "Zeilenumbruch" auch immer dazu. Muss ich dem Befehl evtl. irgendein Zeichen vorsetzen?

Wenns nicht anders geht, ersetz ich hat das Wort "Zeilenumbruch" in einem zweiten Durchlauf wieder mit einem Hochkomma, dann passts auch wieder.

Auf jeden Fall nochmals vielen Dank. Hast mir sehr geholfen!

Gruß
Wiuwiu
Bitte warten ..
Mitglied: wiuwiu
14.07.2011 um 23:49 Uhr
Hallo Friemler,

ich finde das ganz toll, wie Du Dich in mein Problem reinhängst.

Habe zwar von CSE auch einen ganz brauchbaren Weg aufgezeigt bekommen. Mit Deinem Script scheint mir das Ganze jedoch etwas professioneller abzulaufen, zumal auf mich ja nicht nur die eine Datei mit 3,5 MB sondern zahlreiche Dateien mit über 1 GB warten.
Sei mir aber bitte nicht böse, wenn ich das Script heute nicht mehr ausprobiere. Ich muss morgen früh raus.
Sobald ich es ausprobiert habe, melde ich mich wieder.

Nochmals vielen Dank und gute Nacht

wiuwiu
Bitte warten ..
Mitglied: wiuwiu
15.07.2011 um 10:32 Uhr
Hallo Friemler,

lach mich bitte nicht aus, aber ich bring Dein Script nicht zum Laufen.
Kannst Du mir bitte erklären, wo und wie ich das Script speichern und einbinden soll, wenn ich meine Textdatei (C:\Kundendaten\Test.txt) umwandeln will.
Das mit dem Icon rüberziehen hab ich nicht ganz kapiert. Sorry!

Danke

wiuwiu
Bitte warten ..
Mitglied: cse
15.07.2011 um 10:34 Uhr
bei mir hat er nix hingeschrieben, scheinst was falsch zu machen ;)

vergiss nicht den thread als gelöst zu markieren!
Bitte warten ..
Mitglied: wiuwiu
15.07.2011 um 19:33 Uhr
Hallo cse,

hab jetzt einen anderen Editor (notepad++) hergenommen, da läuft es einwandfrei. Der Vorteil dieses Editors besteht übrigens darin, dass er die Anzahl der Zeichen und der Zeilen ausgibt.
Nur zur Information: Meine Datei mit 3,5 MB hatte ca. 3,6 Mio Zeichen in einer Zeile, nach Setzen der Zeilenumbrüche wurden daraus ca. 120.000 Zeilen. Die Umwandlung dauerte nicht einmal 1 Minute. Kann das Programm (Freeware) nur wärmstens weiterempfehlen.

Vielen Dank nochmals für Deine Hilfe, vielleicht trifft man sich wieder mal im Portal

Viele Grüße

wiuwiu
Bitte warten ..
Mitglied: wiuwiu
15.07.2011 um 19:37 Uhr
Hallo Friemler,

meine letzte Frage hat sich erledigt.

Hab jetzt die Daten mit einem Editor (notepad++) umgewandelt, da läuft es einwandfrei. Der Vorteil dieses Editors besteht übrigens darin, dass er die Anzahl der Zeichen und der Zeilen ausgibt.
Nur zur Information: Meine Datei mit 3,5 MB hatte ca. 3,6 Mio Zeichen in einer Zeile, nach Setzen der Zeilenumbrüche wurden daraus ca. 120.000 Zeilen. Die Umwandlung dauerte nicht einmal 1 Minute. Kann das Programm (Freeware) nur wärmstens weiterempfehlen.

Vielen Dank nochmals für Deine Hilfe, vielleicht trifft man sich wieder mal im Portal

Viele Grüße

wiuwiu
Bitte warten ..
Ähnliche Inhalte
VB for Applications

Script um für eine Access- Abfrage Datensätze in jeweils eine Datei zu exportieren

Frage von GraudonVB for Applications11 Kommentare

Problem: ich möchte das Ergebnis einer Access-Abfrage für jeden einzelnen Datensatz eine eigene Text-Datei ausliefern. Die Abfrage läuft in ...

VB for Applications

Access Datensätze einzeln kopieren einfügen

gelöst Frage von QwertzuiopueVB for Applications3 Kommentare

Hallo Hallo, also ich habe eine Datenbank A mit Pfad PfadA und eine Datenbank B mit PfadB. Ich möchte ...

Batch & Shell

Batch einzelne zeilen aus einer txt.datei in jeweils verschiedene variablen schreiben

gelöst Frage von ManuelBatBatch & Shell5 Kommentare

Guten Tag, Ich sitze grad an einem Projekt von mir (Eine bat zum verschlüsseln und entschlüsseln von Buchstaben) Mein ...

VB for Applications

Bekommt GetDetailsOf nicht in ein Textfile

Frage von 94451VB for Applications4 Kommentare

Folgender aufbau: ich will per VBS-Script Bilder in eine (Indizierungs-) Datei laden das Funktioniert auch soweit doch sobald ich ...

Neue Wissensbeiträge
Vmware
VMware Update für den ESXi 5.5 verfügbar
Information von sabines vor 41 MinutenVmware

Nach dem ganzen Hickhack um Update mit Microcode Anpassungen und Rückzug, gibt es nun für den ESXi 5.5 ein ...

CPU, RAM, Mainboards

Meltdown und Spectre: Intel zieht Microcode-Updates für Prozessoren zurück

Information von keine-ahnung vor 4 StundenCPU, RAM, Mainboards3 Kommentare

Moin, extrem lutztig. Nur gut, dass ich noch nicht beim Probanden-Bingo mitgemacht habe :-) LG, Thomas

Router & Routing
PfSense als Addon auf QNAP
Information von magicteddy vor 18 StundenRouter & Routing3 Kommentare

Moin, für Spielereien eine ganz nette Idee aber ich fürchte das soetwas auch als echte Firewall genutzt wird: In ...

Datenschutz

Teamviewer kommt für IoT-Geräte wie den Raspberry Pi

Information von magicteddy vor 1 TagDatenschutz1 Kommentar

Moin, jetzt werden IoT Geräte endgültig zur Wanze? Anscheinend kann man auf einem Dashboard seine Geräte visualisieren Ich stelle ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Preis für Wartungsvertrag ok?
gelöst Frage von a-za-zNetzwerkmanagement26 Kommentare

Hallo! Mal ne Frage, weil ich mich mit dem akzeptablen Preis für einen Reaktionszeitvertrag nicht auskenne. Meine Firma hat ...

Windows Server
TEMP-Profile
gelöst Frage von Forseti2003Windows Server21 Kommentare

Guten Morgen, wer kennt sie nicht, die lieben Temporären Benutzerprofile, vorallem immer dann, wenn man sie am wenigsten braucht. ...

Multimedia & Zubehör
Welches Tablet für die Verkäufer?
Frage von Hendrik2586Multimedia & Zubehör15 Kommentare

Guten Morgen meine Lieben, vielleicht könnt ihr mir ja helfen. Es geht um unsere Außendienstmitarbeiter /Verkäufer. Sie sollen demnächst ...

Windows Netzwerk
Ist ein Portforwarding auf einen PC ohne lauschendes Programm ein (großes) Sicherheitsproblem?
Frage von PluwimWindows Netzwerk13 Kommentare

Hallo zusammen, zur Fernwartung eines Rechners an einem anderen Ort nutze ich VNC. Da dieser Rechner einfach nur eine ...