BATCH Zahl aus einem Textstring einer .log file in Variable einlesen ?
- deleted by user -
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 108372
Url: https://administrator.de/contentid/108372
Ausgedruckt am: 24.11.2024 um 13:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo DMX!
Batch ist ja für String-Operationen nicht unbedingt erste Wahl, aber mit HTML-Dateien wird's, wegen der (Batch-)Sonderzeichen "<", ">" und "&" besonders mühsam - daher lieber die "Drecksarbeit" ;-.) einem (vom Batch erzeugten) VBScript übertragen:
Die Suchmuster in Zeile 5 sind für das Auffinden von ganzen Zahlen vorgesehen - soferne auch Dezimalzahlen gesucht werden sollen, müsste der Klammerausdruck "(\d+)" so aussehen:
Damit wird festgelegt, dass
Das Ergebnis der Suche wird, durch Leerzeichen getrennt, an den Batch zurück übertragen und mittels "for"-Schleife auf einzelne Variablen aufgeteilt.
Grüße
bastla
P.S.: Für ev Rückfragen bin ich leider erst wieder ab Donnerstag erreichbar ...
Batch ist ja für String-Operationen nicht unbedingt erste Wahl, aber mit HTML-Dateien wird's, wegen der (Batch-)Sonderzeichen "<", ">" und "&" besonders mühsam - daher lieber die "Drecksarbeit" ;-.) einem (vom Batch erzeugten) VBScript übertragen:
@echo off & setlocal
set "Datei=D:\Deine Datei.html"
set G=GetNumbers.vbs
>%G% echo P=Array("document\.o\.p\, (\d+)", "getElementById\('fid(\d+)")
>>%G% echo T=CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0)).ReadAll:Set rE=New RegExp:rE.Global=True:rE.IgnoreCase=True
>>%G% echo For i=0 To UBound(P):rE.Pattern=P(i):Set Res=rE.Execute(T):For Each R In Res:E=R.SubMatches(0):Next:A=A^&" "^&E:Next:WScript.Echo A
set cid=
set fid=
for /f "tokens=1,2" %%i in ('cscript //nologo %G% "%Datei%"') do (set "cid=%%i" & set "fid=%%j")
if not defined fid (echo Mindestens ein Wert nicht gefunden! & pause & goto :Ende)
echo %cid%_%fid%
::
:: weitere Verarbeitungsschritte
::
:Ende
(\d+\.?\d*)
- "eine oder mehrere" (wegen: +) Ziffern (\d),
- gefolgt von "keinem oder einem" (Steuerzeichen: ?) "." (falls ein Komma als Dezimaltrennzeichen verwendet würde, den Punkt dadurch ersetzen) und
- "keiner oder mehreren" (dafür: *) weiteren Ziffern (\d),
Das Ergebnis der Suche wird, durch Leerzeichen getrennt, an den Batch zurück übertragen und mittels "for"-Schleife auf einzelne Variablen aufgeteilt.
Grüße
bastla
P.S.: Für ev Rückfragen bin ich leider erst wieder ab Donnerstag erreichbar ...
Moin DMX.
wir hatten ja zwischendurch schon per PN Kontakt und ich wiederhole es gerne hier noch mal:
Für so etwas gibt es - wenn man/frau nichta Vernünftiges benutzen darf, was XML parsen kann - das Sed-Utility oder eben VBScript.
Oder, BTW. natürlich auch JScript... warum nimmst Du das nicht?
Oder besser noch - wenn Du den gesamten Quelltext als "Log"-Datei wegschreiben kannst, dann kannst Du doch auch die zwei Zeilen DocID='xyz" und DocCid=45 in eine Zwei-Zeilen-Datei schreiben.
Und ich mag weder Lösungen, in denen mit einer Schlagbohrmaschine ein Nagel in die Wand gekloppt noch Lösungen, in denen ein Dübel mit einem 5-Pfund-Hammer in die Wand geschraubt wird.
Anyhow, es geht eigentlich gar nicht über Batch und macht definitiv keinen Sinn .
Eine Lösungsskizze, die mit Deinem o.a. "Log"-File ein Ergebnis liefert (wenn auch erst nach Ewigkeiten) ist:
Ausgabe, wenn in der dmx.txt das oben gepostete XML-Fragment steht:
Aber... ehrlich - das würde ich niemandem als "Lösung" anbieten wollen, und ich verwende gerne Batche für Problem, wo andere irgendwas mit Compiler und Linker anwerfen.
Ändere den Prozess - schreibe eine "echte" Logdatei.
Grüße
Biber
wir hatten ja zwischendurch schon per PN Kontakt und ich wiederhole es gerne hier noch mal:
- Batch ist hier für diese Aufgabe ein absolut ungeeignetes Werkzeug - es geht nicht ohne Verrenkungen, aus beliebigen Stellen einer ziemlich beliebig aufgebauten XML-Datei bestimmte Werte (die eigenlich ja auch wieder nur zweite oder dritte Parameter von bestimmten JScript-Methoden sind) rauszuflöhen.
Für so etwas gibt es - wenn man/frau nichta Vernünftiges benutzen darf, was XML parsen kann - das Sed-Utility oder eben VBScript.
Oder, BTW. natürlich auch JScript... warum nimmst Du das nicht?
Oder besser noch - wenn Du den gesamten Quelltext als "Log"-Datei wegschreiben kannst, dann kannst Du doch auch die zwei Zeilen DocID='xyz" und DocCid=45 in eine Zwei-Zeilen-Datei schreiben.
Und ich mag weder Lösungen, in denen mit einer Schlagbohrmaschine ein Nagel in die Wand gekloppt noch Lösungen, in denen ein Dübel mit einem 5-Pfund-Hammer in die Wand geschraubt wird.
Anyhow, es geht eigentlich gar nicht über Batch und macht definitiv keinen Sinn .
Eine Lösungsskizze, die mit Deinem o.a. "Log"-File ein Ergebnis liefert (wenn auch erst nach Ewigkeiten) ist:
@echo off & setlocal
For /f "delims=<> tokens=4-26 " %%a in (dmx.txt) do (
For %%A in ("%%a" "%%b" "%%c" "%%d" "%%e" "%%f" "%%g" "%%h" "%%i" "%%j" "%%k" "%%l" "%%m" "%%n" "%%o" "%%p" "%%q" "%%r" "%%s" "%%t" "%%u" "%%v" "%%v" "%%x" "%%y" "%%z") do (
@if not "%%~A"=="" (
@echo "%%~A"|find "parent.document.getElementById" >nul && @set "DMXebyID=%%~A"
@echo "%%~A"|find "document.o.p,">nul && @Set "DMXdocSID=%%~A"
)
))
For /f "delims=' tokens=2" %%i in ("%DMXebyID%") do set DMXebyID=%%i
For /f "delims=,) tokens=3" %%i in ("%DMXdocSid%") do set DMXdocSid=%%i
Set DMX
Ausgabe, wenn in der dmx.txt das oben gepostete XML-Fragment steht:
dmx.bat
DMXdocSID= 14
DMXebyID=fid0
Aber... ehrlich - das würde ich niemandem als "Lösung" anbieten wollen, und ich verwende gerne Batche für Problem, wo andere irgendwas mit Compiler und Linker anwerfen.
Ändere den Prozess - schreibe eine "echte" Logdatei.
Grüße
Biber