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

String in Dateien suchen und in andere Datei schreiben, wenn gefunden.

Frage Entwicklung

Mitglied: akrupp2

akrupp2 (Level 1) - Jetzt verbinden

13.05.2009, aktualisiert 09:47 Uhr, 3934 Aufrufe, 2 Kommentare

Hallo,
nach elend langer tüftelei komme ich einfach nicht weiter und hoffe, dass mir hier jemand einen Lösungsansatz geben kann.

Folgendes Problem:

Ich verwalte und pflege auf der Arbeit das Korrespondenz-System. Jede Korrespondenzvorlage ist im System als XML-Datei abgelegt und enthält einige Datenfelder. Diese Datenfelder, will ich raussuchen und in eine Logdatei schreiben. Ziel ist es rauszufinden in welcher Vorlage, welche Datenfelder vorkommen.

Jetzt gibt es dabei aber folgende Probleme:

1. Die XML-Datei die durchsucht werden soll besteht (wenn man sie im Editor öffnet) aus nur einer Zeile, so dass mir ein zeilenweises auslesen nicht wirklich was bringt.

2. Der Suchstring kann in dieser Zeile mehrmals vorkommen

3. Jeder gefundene String soll dann in eine Logfile geschrieben werden. Allerdings nicht nur der String selbst, weil der Suchstring nur ein Teil des Datenfeldes ist, welches in die Logdatei geschrieben werden soll.

So nun nochmal etwas konkreter:

Eine XML-Datei sieht wie folgt aus:

<?xml_version="1.0"?><!--generated by Thunderhead.Content, Version=3.0.12.0, Culture=neutral, PublicKeyToken=84c666f5e68a8973--><docdef version="3.0" bo-name="Human_Resources" bo-class="Th_180000251*_Human_Resources" styleset="190000626"><script language="JavaScript" /><channel channel="2" template="190000624"><sectionmap section="Letter Block" region="Letter Body" /><sectionmap section="Page Number" region="Page Number" /><sectionmap section="Letter Footer" region="Footer" /><sectionmap section="DB Logo" region="Company Logo" /><sectionmap section="Adressblock Customer" region="Address Customer" /><sectionmap section="Adress DB" region="Address DB" /><setproperty name="display-width"><string>210mm</string></setproperty></channel><section id="2" name="Document" edit-groups="*"><section id="57" name="DB Logo"><fraglink id="73" resid="190000861"><argvalue name="Unternehmen"><var name="Human_Resources.db_people_Datenfelder.Absenderinformationen.Unternehmen" type="string" /></argvalue><argvalue name="Region"><var name="Human_Resources.db_people_Datenfelder.Absenderinformationen.Region" type="string" /></argvalue></fraglink></section><section id="22" name="Adressblock Customer" edit-groups="*"><fraglink id="75" resid="190000128"><argvalue name="Anrede__Herrn_Frau"><script>Human_Resources.db_people_Datenfelder.Adressinformationen.Anrede__Herrn_Frau</script></argvalue><argvalue name="Vollstaendiger_Name_mit_Vorsatz_Zusatz_Titel"><script>Human_Resources.db_people_Datenfelder.Adressinformationen.Vollstaendiger_Name_mit_Vorsatz_Zusatz_Titel</script></argvalue><argvalue name="Adresszeile_1_Strasse_Empfaenger"><script>Human_Resources.db_people_Datenfelder.Adressinformationen.Adresszeile_1_Strasse_Empfaenger</script></argvalue><argvalue name="Adresszeile_2_Strasse_Empfaenger"><script>Human_Resources.db_people_Datenfelder.Adressinformationen.Adresszeile_2_Strasse_Empfaenger</script></argvalue><argvalue name="Adresszeile_3_Strasse_Empfaenger"><script>Human_Resources.db_people_Datenfelder.Adressinformationen.Adresszeile_3_Strasse_Empfaenger</script></argvalue><argvalue name="Ort_Emfaenger"><script>Human_Resources.db_people_Datenfelder.Adressinformationen.Ort_Empfaenger</script></argvalue><argvalue name="Ort2_Emfaenger"><script>Human_Resources.db_people_Datenfelder.Adressinformationen.Ort_2_Empfaenger</script></argvalue><argvalue name="PLZ_Emfaenger"><script>Human_Resources.db_people_Datenfelder.Adressinformationen.PLZ_Empfaenger</script></argvalue><argvalue name="Land_Emfaenger"><script>Human_Resources.db_people_Datenfelder.Adressinformationen.Land_Empfaenger</script></argvalue><argvalue name="Unternehmen"><var name="Human_Resources.db_people_Datenfelder.Absenderinformationen.Unternehmen" type="string" /></argvalue></fraglink></section><section id="25" name="Adress DB"><fraglink id="76" resid="190000844"><argvalue name="Abt_Gruppe"><var name="Human_Resources.db_people_Datenfelder.Absenderinformationen.Abteilung_Gruppe" type="string" /></argvalue

Ein Datenfeld sieht
entweder so: <var name="Human_Resources.db_people_Datenfelder.Absenderinformationen.Region" type="string" />
oder so: <script>Human_Resources.db_people_Datenfelder.Adressinformationen.Ort_Empfaenger</script>
aus.

Mein verwendeter Suchstring ist: "Human_Resources.db_people_Datenfelder."

So, nun zur Aufgabe:

Die Datei soll nach dem Suchstring durchsucht werden. Jedesmal, wenn der String gefunden wurde, soll nicht nur der Suchstring, sondern das komplette Datenfeld in eine Logdatei geschrieben werden.
D.h. Das Programm soll nach dem Suchstring "Human_Resources.db_people_Datenfelder." suchen und alles bis zum Zeichen ' " ' oder dem Zeichen '<' ind die Datei schreiben, so dass in der Datei dann beispielsweise folgendes stehen müsste: "Human_Resources.db_people_Datenfelder.Absenderinformationen.Abteilung_Gruppe"

Ich habe versucht es mit einer Batch zu lösen, aber ich glaube mittlerweile, dass die Batch-Mittel, dafür nicht ausreichend sind, weil es sich beim durchsuchen bzw. bei der Ausgabe des Strings an bestimmten Zeichen wie z.B. ">" stört. Auch kann ich in der FOR-Schleife kein Anführungszeichen als delims definieren.

Wer kann mir da denn weiterhelfen. Die Lösung kann entweder ein Batch-Skript oder auch ein VB-Skript (ich denke, das bietet mehr Möglichkeiten) sein.

Vielen Dank schon mal im voraus.
Mitglied: LotPings
13.05.2009 um 12:20 Uhr
Hallo Alexander,

eine etwas knapper gefasste Frage hätte wahrscheinlich auch genügt und erhöht die Wahrscheinlichkeit von Antworten.

Zum bearbeiten / extrahieren von XML Daten gibt es zwar bessere Lösungen (XML, DTD,XSL,XSLT etc).
Aber ein "quick and dirty" Batch mit der Hilfe von Sed (hier klicken) sollte dafür genügen.

Das Escapen des Anführungszeichens bringt sed beim Interpretieren der Kommandozeile etwas aus dem Tritt, deshalb sind zwei Kommandos nötig.

01.
@echo off 
02.
:: Zu bearbeitende Datei wird als Argument erwartet 
03.
set Sed="%ProgramFiles%\GnuWin32\bin\Sed.exe" 
04.
:: set Sed="%ProgramFiles(x86)%\GnuWin32\bin\Sed.exe" 
05.
Set Log=%UserProfile%\LogFile.txt 
06.
Set TempF="%Temp%\TempFile%Random%.txt" 
07.
Set "Suche=Human_Resources.db_people_Datenfelder" 
08.
 
09.
:: Alle <>" gegen Zeilenwechsel austauschen 
10.
>%TtempF%" %Sed% -e "s/[<>\"]/\n/g" %1 
11.
 
12.
:: Suchbegriff filtern, Zeilen an Logdatei anhängen. 
13.
>>%Log% "%Sed%" -n -e "/%Suche%/p" "%TempF%"
Gruß
LotPings
Bitte warten ..
Mitglied: akrupp2
13.05.2009 um 18:33 Uhr
Hallo LotPings,

danke für die schnelle Antwort ich bin nämlich echt verzweifelt. Ich werde Deine Lösung gleich mal ausprobieren (auch wenn ich dafür nicht drum herum komme SED zu verwenden). Vor meiner Aufgabe geht eine Suchen und Ersetzen Operation voraus, die ich über ein anderes Tool realisiere (MB-Search&Replace). Leider hat dieses Tool keine "NUR" suchen Funktion und ein Logfile schreibt es auch nicht. Deswegen, wollte ich die Kontrolle über ein Batch- oder VB-skript umsetzen und ggf. gefundene Strings in ein Logfile schreiben.
Meine Frage habe ich versucht so ausführlich wie möglich zu gestalten, damit die Komplexität der Aufgabe deutlich wird. Aber wenn ich mir Dein Skript anschaue, dann sehe ich, dass die Aufgabe nur mit DOS eigenen Mitteln zu komplex ist.

Wenn ich Deine Lösung getestet habe, werde ich Dir ein Feedback geben.

Gruß Alex
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst 2 große TXT Dateien vergleichen und Unterschiede in andere Datei schreiben (6)

Frage von sid.pdm zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch-Skript: Messdaten in Textdatei finden und in eine neue Datei schreiben (5)

Frage von habmalnefrage zum Thema Batch & Shell ...

Windows Systemdateien
gelöst Registry-Schlüssel per Batch auslesen und in Datei schreiben (9)

Frage von Philzip zum Thema Windows Systemdateien ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...