Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Sehr große XML-Datei nach bestimmten Tag durchsuchen und in Textdatei speichern

Frage Entwicklung Batch & Shell

Mitglied: Drachenlady

Drachenlady (Level 1) - Jetzt verbinden

15.07.2013 um 16:16 Uhr, 1626 Aufrufe, 13 Kommentare

Hallo Forum,
da ich leider nicht mit einer Aufgabenlösung weiterkomme, wende ich mich an Euch in der Hoffnung, dass mir jemand einen Tipp geben kann.
Hier die Aufgabenbeschreibung:
Ziel ist es, aus einer XML-Datei bestimmte Inhalte von Zahlungsangaben mittels Batch in eine Text-/CSV-Datei zu extrahieren.
Die Datei befindet sich als einzige XML-Datei in diesem Verzeichnis (immer).
Das Problem dabei ist, dass die XML-Datei sehr groß ist und dann nicht nur die gesuchten Inhalte in der Datei vorhanden sind.
Die gesuchten Inhalte befinden sich jedoch immer in den gleichlautenden Tags und immer in der gleichen Reihenfolge.
Beispiel:
<PmtId>
<EndToEndId>1</EndToEndId>
</PmtId>
<Amt>
<InstdAmt Ccy="EUR">100.00</InstdAmt>
</Amt>
<CdtrAgt>
<FinInstnId>
<BIC>BIC</BIC>
</FinInstnId>
</CdtrAgt>
<Cdtr>
<Nm>Name, Vorname</Nm>
</Cdtr>
<CdtrAcct>
<Id>
<IBAN>DE999999999999999</IBAN>
</Id>
</CdtrAcct>
<Purp>
<Cd>GOVT</Cd>
</Purp>
<RmtInf>
<Ustrd>Verwendungszweck</Ustrd>
</RmtInf>
Soweit das Beispiel.
Hier nun der Versuch, dem Ganzen auf die Batch-Sprünge zu helfen:

@echo off & setlocal
set pfad=C:\ATEST\
set "CSV1=Liste.csv"


REM Liste erstellen

pushd "%pfad%"
for /f "delims=" %%i in ('dir /s /b *.xml') do call :ProcessFile "%%i"
popd
goto :eof

:ProcessFile
set "Record="
for %%f in ("<InstdAmt>" "<BIC>" "<Nm>" "<IBAN>" "<Ustrd>") do for /f "tokens=5 delims=<>" %%v in ('findstr %%f %1') do call

:ProcessField %%v
>>"%CSV1%" echo %Record:~1%
goto :eof

:ProcessField
set Record=%Record%%1%Delim%
goto :eof

echo

Das Ergebnis ist, dass die Datei "Liste.csv" angelegt wird, jedoch in den Excel-Feldern A1 und A2 jeweils ~1 als Inhalt eingetragen wird.

PS:
Vorab - sorry für die schon ähnlichen im Forum vorhandenen Fragen, bei denen ich jedoch leider nicht so richtig fündig geworden bin (vielleicht lag´s ja auch am heutigen geistigen Montagsdilemma...)

Für ´nen Tipp wäre ich echt dankbar, weil ich momentan net so richtig checke, auf welcher Leitung ich eigentlich gerade herumstehe!
Mitglied: Endoro
15.07.2013, aktualisiert 16.07.2013
Hallo,

kannst du mal testen:
01.
@ECHO OFF &SETLOCAL 
02.
SET "csv=liste.csv" 
03.
(FOR %%i IN (*.xml) DO ( 
04.
	FOR /f "tokens=1,2delims=<> " %%a IN ( 
05.
	'findstr "<InstdAmt> <BIC> <Nm> <IBAN> <Ustrd>" "%%~i"' 
06.
	) DO ( 
07.
		ECHO(%%a,%%b 
08.
09.
))>"%csv%" 
10.
TYPE "%csv%"
lg
Bitte warten ..
Mitglied: Drachenlady
16.07.2013 um 10:06 Uhr
Hallo Endoro,
vielen Dank für die schnelle Antwort -
nur leider hat es nicht gepgeht, es werden die Tag-Bezeichnungen in das csv-File geschrieben, nicht deren Inhalte, also bastle ich noch ´n bisschen weiter...
Gruß Drachenlady
Bitte warten ..
Mitglied: Endoro
16.07.2013, aktualisiert um 11:08 Uhr
Hallo,

dann solltest du dein XML file noch mal ordentlich in <code> tags verpackt veröffentlichen.

Wahrscheinlich hast du leading white space drinnen.
[€]Ich habs mal dahingehend geändert, versuchs noch mal.[/€]

lg
Bitte warten ..
Mitglied: Drachenlady
16.07.2013 um 14:17 Uhr
Hallo Endoro,
danke für die Rückantwort, die ich nicht wirklich verstehe.
Leerzeichen kann ich nicht ausschließen, dass ist richtig, Zeilenumbrüche gibt es nicht.
Die Änderung, von der Du sprichst sehe ich nicht und der Code oben ist original und in Fortsetzung des obigen Auszuges ginge es sequentiell codseitig genau so weiter, nur eben inhaltlich nicht.
Wie gesagt, leider verstehe ich Deine Ausführungen nicht wirklich, könntest Du mir dabei vielleicht noch einmal auf die geistigen Sprünge helfen?
Viele Grüße
Drachenlady
Bitte warten ..
Mitglied: Endoro
16.07.2013 um 15:17 Uhr
Hallo, es ist einfach, du setzt hier zwei "Tags" rein 1) < code> und 2) </code> (ohne Leerzeichen) und packst deine XML dazwischen.
Dann können wir besser erkennen, was Sache ist.

lg
Bitte warten ..
Mitglied: Drachenlady
16.07.2013 um 16:50 Uhr
Hier der Code:
01.
<PmtId> 
02.
<EndToEndId>1</EndToEndId> 
03.
</PmtId> 
04.
<Amt> 
05.
<InstdAmt Ccy="EUR">100.00</InstdAmt> 
06.
</Amt> 
07.
<CdtrAgt> 
08.
<FinInstnId> 
09.
<BIC>BIC</BIC> 
10.
</FinInstnId> 
11.
</CdtrAgt> 
12.
<Cdtr> 
13.
<Nm>Name, Vorname</Nm> 
14.
</Cdtr> 
15.
<CdtrAcct> 
16.
<Id> 
17.
<IBAN>DE999999999999999</IBAN> 
18.
</Id> 
19.
</CdtrAcct> 
20.
<Purp> 
21.
<Cd>GOVT</Cd> 
22.
</Purp> 
23.
<RmtInf> 
24.
<Ustrd>Verwendungszweck</Ustrd> 
25.
</RmtInf>
Bitte warten ..
Mitglied: Endoro
16.07.2013, aktualisiert um 17:14 Uhr
Hallo,

führende Leerzeichen sind nicht in der XML-Datei.
Kommt sie von einem Unix/Mac-Rechner?

01.
@ECHO OFF &SETLOCAL 
02.
SET "csv=liste.csv" 
03.
(FOR %%i IN (*.xml) DO ( 
04.
	FOR /f "tokens=1,2delims=<>" %%a IN ( 
05.
	'findstr "<InstdAmt> <BIC> <Nm> <IBAN> <Ustrd>" "%%~i"' 
06.
	) DO ( 
07.
		ECHO(%%a,%%b 
08.
09.
))>"%csv%" 
10.
TYPE "%csv%"
Das läuft bei mir ohne Probleme durch.

Dann könnte ich dir noch eine sed-Lösung anbieten:
01.
for %%i in (*.xml) do sed -nr "/<InstdAmt>|<BIC>|<Nm>|<IBAN>|<Ustrd>/s/<(.*)>(.*)<.*/\1,\2/p" "%%~i" > "liste.csv"
lg
Bitte warten ..
Mitglied: Drachenlady
16.07.2013 um 17:35 Uhr
Hallo Endoro,
nein die Datei hat ihren Ursprung von einen WINDOWS-Rechner und die sed-Lösung versuche ich auch noch - Dankeschön!
Gruß
Drachenlady
Bitte warten ..
Mitglied: rubberman
16.07.2013 um 23:08 Uhr
Hallo Drachenlady.

Zeilenumbrüche gibt es nicht.
... würde nicht zu deinem geposteten Quelltext passen und wäre ein Ausschlusskriterium für die Verwendung von Batch.

Grüße
rubberman
Bitte warten ..
Mitglied: Drachenlady
17.07.2013 um 10:25 Uhr
Hallo Endoro,
der Test der "sed"-Lösung ergibt folgende Ausschrift:
Der Befehl "sed" ist entweder falsch geschrieben oder konnte nicht gefunden werden.
Die Eingabe von sed /? in der Commandozeile ergibt die gleiche "Absage".
Wass sollte der Befehl den bewirken?
Noch ´n Tipp dazu?
Danke vorab!
Bitte warten ..
Mitglied: Invisan
17.07.2013 um 10:34 Uhr
Zitat von Drachenlady:
Hallo Endoro,
der Test der "sed"-Lösung ergibt folgende Ausschrift:
Der Befehl "sed" ist entweder falsch geschrieben oder konnte nicht gefunden werden.
Die Eingabe von sed /? in der Commandozeile ergibt die gleiche "Absage".
Wass sollte der Befehl den bewirken?
Noch ´n Tipp dazu?
Danke vorab!

Hallo Drachenlady,

sed ist ein standardmäßiger Linux Befehl und kann daher auch nicht ohne weiteres gehen.
Mir wäre allerdings auch nicht bekannt das es sed für Windows gibt.

Mfg Invisan
Bitte warten ..
Mitglied: Drachenlady
17.07.2013 um 13:35 Uhr
Hallo Invisan,
herzlichen Dank für den Tipp!
Ich wühle mich mal durch die Foren, ob es etwas analoges für WINDOWS gibt...
Grüße
Drachenlady
Bitte warten ..
Mitglied: Endoro
17.07.2013 um 16:46 Uhr
Hallo,

sed wird von Windows standardmässig leider nicht installiert.
Kannst du hier bekommen.

lg
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
gelöst Xml-Datei laden bzw. auf Festplatte kopieren und per VBA in eine Access-Tabelle speichern (22)

Frage von machohunk zum Thema VB for Applications ...

XML
XML Datei Fehler? (1)

Frage von Patrick-IT zum Thema XML ...

Batch & Shell
Script zum XML Datei Umschreiben (12)

Frage von cberndt zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...