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

Frage Entwicklung Batch & Shell

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

Mitglied: Drachenlady

Drachenlady (Level 1) - Jetzt verbinden

15.07.2013 um 16:16 Uhr, 1681 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 ..
Ähnliche Inhalte
Entwicklung
Aus einer XML-Datei mehrere Daten auslesen und in einer bestimmten Syntax in eine Excel-Datei speichern
gelöst Frage von LocXarEntwicklung2 Kommentare

Guten Tag, ich habe hier eine xml datei (ausschnitt am ende meines Posts) in der Daten aus einer Datenbank ...

Batch & Shell
Mittels Batch bestimmte Information aus unbekannter Textdatei auslesen und in XML-Datei schreiben
gelöst Frage von tardezyxBatch & Shell3 Kommentare

Hallo, es sind innerhalb eines Verzeichnisses sehr viele Unterordner vorhanden, in denen sich jeweils eine Textdatei befindet, deren Strukturen ...

Batch & Shell
XML nach Liste mit Werten durchsuchen
Frage von bockerBatch & Shell12 Kommentare

Guten Morgen. Ich habe folgendes Problem: Ich habe eine XML Datei mit etlichen Angaben die ca 30.000 Datensätze hat. ...

Batch & Shell
Batchdatei: Datei nach bestimmten Zeilen durchsuchen und in anderer Datei einfügen
Frage von Vit1985Batch & Shell1 Kommentar

Hallo, ich möchte mit einem batch aus einer *.msg Datei 4 Zeilen heraussuchen und diese Zeilen sollen dann in ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 52 MinutenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 18 StundenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 19 StundenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 20 StundenSicherheit9 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Windows 10
Netbook erkennt Soundkarte nicht - keinerlei Info zum Hersteller und Modell vom Netbook und Hardware bekannt
Frage von 92943Windows 1031 Kommentare

Guten Tag, meine Schwester reist in einigen Wochen für ein paar Monate ins Ausland und hat sich dafür ein ...

Batch & Shell
Anmeldevorgang für Informatikraum (Schule) unter Windows
gelöst Frage von IngenieursBatch & Shell29 Kommentare

Hey zusammen, ich werde in naher Zukunft den Informatik Raum meiner jetzigen Schule von dem aktuellen Betreiber übernehmen (Vertrag ...

Netzwerkgrundlagen
Welches Modem für VDSL 50000 der T-Com
gelöst Frage von Windows10GegnerNetzwerkgrundlagen21 Kommentare

Hallo, ein Kollege von mir will sich VDSL50000 von der T-Com holen, um daran einen Server zu betreiben. Ich ...

Batch & Shell
AD-Abfrage in Batchdatei und Ergebnis als Variable verarbeiten
gelöst Frage von Winfried-HHBatch & Shell19 Kommentare

Hallo in die Runde! Ich habe eine Ergänzungsfrage zu einem alten Thread von mir. Ausgangslage ist die Batchdatei, die ...