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

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, 3965 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
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 2 TagenLinux

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 3 TagenTipps & 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 3 TagenSicherheit12 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 3 TagenSicherheit12 Kommentare

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

Heiß diskutierte Inhalte
E-Mail
Erfahrungen mit hMailServer gesucht
Frage von it-fraggleE-Mail10 Kommentare

Hallo, meine neue Stelle möchte einen eigenen Mailserver. Ich als Linuxkind war direkt geistig mit Postfix dabei. Leider wollen ...

Entwicklung
VBS: alle PDF-Dateien in einem Ordner gleichzeitig öffnen
gelöst Frage von JuweeeEntwicklung9 Kommentare

Hallo, ich habe in deiner Ordnerstruktur (.\Tagesberichte\xx.18\) mehrere dynamische PDF-Formulare (mit LCD erstellt). Die Berichtsformulare sind im Layout alle ...

Firewall
Penetrationstester-Labor - Firewalls
Frage von Oli-nuxFirewall9 Kommentare

Mich würde interessieren warum man beim Einrichten eines Penetrationstester-Labor (VMs) die Firewall der Systeme deaktivieren soll? Hat das nur ...

Netzwerkgrundlagen
IPv6 Inter-VLAN Routing
gelöst Frage von clSchakNetzwerkgrundlagen9 Kommentare

Hi ich befasse mich gerade mit der Implementierung von IPv6 was bisher (in einem VLAN) korrekt funktioniert inkl. DNS ...