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

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

Mitglied: akrupp2

akrupp2 (Level 1) - Jetzt verbinden

13.05.2009, aktualisiert 09:47 Uhr, 3976 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 ..
Ähnliche Inhalte
Batch & Shell

Schreiben eines Strings mit Leerzeichen in eine Datei

gelöst Frage von c20082005Batch & Shell6 Kommentare

Hallo, nach langem Rum- und Ausprobieren möchte ich Euch um Hilfe bitten für folgendes Problem: Ich möchte mit einer ...

Batch & Shell

Mit Batch nach einem String in allen bat Dateien auf C suchen und die gefundenen evtl. löschen

gelöst Frage von xxxxxxxBatch & Shell8 Kommentare

Hallo liebe Forummitglieder, Ich habe schon viele nützliche Beiträge bei Ihnen gefunden und bin daher sehr begeistert von Ihren ...

Batch & Shell

BATCH - Wort in Zeile suchen, wenn gefunden in txt-Datei schreiben. (ggfls. mit Umformatierung)

gelöst Frage von BlattlausOGBatch & Shell10 Kommentare

Hallo, ich habe ein erneutes Anliegen und weis nicht recht wie ich das bewerkstelligen soll. Es existiert eine "Beispiel.log" ...

Batch & Shell

Von xcopy nicht gefundene Dateien werden nicht protokolliert

gelöst Frage von phsprengerBatch & Shell4 Kommentare

Hallo, mit einem kleinen Batch-Programm versuche ich, eine Liste von Dateien, die in einer TXT-Datei stehen, von A nach ...

Neue Wissensbeiträge
Windows 10

Microcode-Updates KB4090007, KB4091663, KB4091664, KB4091666 für Windows 10

Information von kgborn vor 4 StundenWindows 101 Kommentar

Kurze Information für Administratoren von Windows 10-Systemen, die mit neueren Intel CPUs laufen. Microsoft hat zum 23. April 2018 ...

iOS
Updates für Iphone und Co
Information von sabines vor 7 StundeniOS

Gestern abend ist iOS 11.3.1 erschienen, ein kleineres Update, dass einige Lücken schließt und "Lahmlegen" nach einem Display Tausch ...

Windows 7

Windows 7 - Server 2008 R2: Exploit für Total Meltdown verfügbar

Information von kgborn vor 1 TagWindows 7

Kleine Information für Administratoren, die für die Updates von Windows 7 SP1 und Windows Server 2008 R2 SP1 verantwortlich ...

Sicherheit

Zero Day-Schwachstelle im Internet Explorer - wird von APT bereits ausgenutzt

Information von kgborn vor 2 TagenSicherheit

Im Kernel des Internet Explorer scheint es eine Zero Day-Lücke zu geben, die von staatlichen Akteuren (APT) im Rahmen ...

Heiß diskutierte Inhalte
C und C++
Frage1 C Programmierung-Makefile Frage2 PHP-Programmierung HTTP-Fehler 404
Frage von KatalinaC und C++33 Kommentare

Hallo, ich habe 2 Fragen, die nichts miteinander zu tun haben aber mit denen ich mich gerade beschäftige: 1. ...

LAN, WAN, Wireless
Watchguard T15 VPN Einrichtung
gelöst Frage von thomasjayLAN, WAN, Wireless25 Kommentare

Hallo zusammen, wir möchten gerne über unsere Watchguard T15 einen VPN-Tunnel (Mobile VPN with IPSec) einrichten! Als Client nutzen ...

Batch & Shell
Powershell: Im AD nach Comutern mit bestimmten IP-Adressen suchen
gelöst Frage von Raven42Batch & Shell21 Kommentare

Hallo zusammen, ich suche nach einer Möglichkeit nach Computern im AD zu suchen , deren IP-Adresse mit 10.11.12. beginnt. ...

Batch & Shell
Mit Powershell den Inhalt einer Excel mit einer Text Datei abgleichen
Frage von Bommi1961Batch & Shell20 Kommentare

Hallo zusammen, ich muss den Inhalt einer Excel Datei (Mappe1) mit dem Daten einer Text Datei abgleichen. Die Daten ...