Nach Wörtern in Datei suchen, die nächsten 4 Zeilen speichern und mit den Werten rechnen.
Hallo, ich bin neu hier und versuche mir hier einige tricks und kniffe anzueignen 
Hallo, ich hoffe ihr könnt mir weiterhelfen...
Also ich habe eine Datei "C:\test.html" in dieser Datei ist eine html-tabelle. Nun möchte ich gerne nach Werten suchen. Z.B. nach "Zeitwert1" das mache ich wie folgt:
das ergebnis ist dann z.B. so:
190:Zeitwert1<TD>
400:Zeitwert1<TD>
610:Zeitwert1<TD>
Nun brauch ich aber immer noch 2 Werte zu jeder Zeile unzwar, wenn "Zeitwert1" in Zeile 190 gefunden wurde, brauche ich den Wert der in Zeile 192 und 194 steht.
Da sind dann 2 Zahlenwerte die ich von einander subtrahieren muss. Die Zeilen sehen so aus:
192: "20:06:21</TD>"
194: "20:06:27</TD>"
Also müsste das "</TD>" auch noch entfernt werden.
Zu guter letzt würde ich das ergebnis in eine neue HTML datei schreiben lassen.
Ist mein vorhaben überhaupt mit batch möglich?
MfG
patrick
Hallo, ich hoffe ihr könnt mir weiterhelfen...
Also ich habe eine Datei "C:\test.html" in dieser Datei ist eine html-tabelle. Nun möchte ich gerne nach Werten suchen. Z.B. nach "Zeitwert1" das mache ich wie folgt:
findstr /n /c:"Zeitwert1" "C:\test.html"
das ergebnis ist dann z.B. so:
190:Zeitwert1<TD>
400:Zeitwert1<TD>
610:Zeitwert1<TD>
Nun brauch ich aber immer noch 2 Werte zu jeder Zeile unzwar, wenn "Zeitwert1" in Zeile 190 gefunden wurde, brauche ich den Wert der in Zeile 192 und 194 steht.
Da sind dann 2 Zahlenwerte die ich von einander subtrahieren muss. Die Zeilen sehen so aus:
192: "20:06:21</TD>"
194: "20:06:27</TD>"
Also müsste das "</TD>" auch noch entfernt werden.
Zu guter letzt würde ich das ergebnis in eine neue HTML datei schreiben lassen.
Ist mein vorhaben überhaupt mit batch möglich?
MfG
patrick
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 153367
Url: https://administrator.de/forum/nach-woertern-in-datei-suchen-die-naechsten-4-zeilen-speichern-und-mit-den-werten-rechnen-153367.html
Ausgedruckt am: 22.05.2025 um 23:05 Uhr
8 Kommentare
Neuester Kommentar
Hallo kleineschaufel und willkommen im Forum!
), sinnvoller (nicht zuletzt wegen der Zeitberechnung) aber per zB VBScript ...
[Edit] ... das (korrekten Inhalt der "test.html"-Datei voraussetzend) etwa so aussehen könnte (die Ausgabe beschränkt sich mangels Beschreibung der gewünschten HTML-Datei auf die reinen Zeitdifferenzen):
[/Edit]
Grüße
bastla
Ist mein vorhaben überhaupt mit batch möglich?
Möglich ja ("... alles außer Brotschneiden ..." [Edit] ... das (korrekten Inhalt der "test.html"-Datei voraussetzend) etwa so aussehen könnte (die Ausgabe beschränkt sich mangels Beschreibung der gewünschten HTML-Datei auf die reinen Zeitdifferenzen):
Datei = "C:\test.html"
Such = "Zeitwert1"
Set fso = CreateObject("Scripting.FileSystemObject")
Zeilen = Split(fso.OpenTextFile(Datei).ReadAll, vbCrLf)'alle Zeilen in Array einlesen
MaxZeilen = UBound(Zeilen) 'höchsten Array-Index ermitteln
For i = 0 To MaxZeilen 'alle Zeilen des Array durchgehen
If InStr(Zeilen(i), Such) > 0 Then 'Suchbegriff in Zeile enthalten?
If i + 4 <= MaxZeilen Then 'Gibt es noch genügend Zeilen, um Zeit2 auslesen zu können?
'Zeile anhand "<" zerlegen, im Teil vor dem ersten "<"
'Anführungszeichen eliminieren und einen in einen Zeitwert umwandeln
Zeit1 = CDate(Replace(Split(Zeilen(i + 2), "<")(0), """", ""))
Zeit2 = CDate(Replace(Split(Zeilen(i + 4), "<")(0), """", ""))
Diff = Zeit2 - Zeit1 'Differenz der beiden Zeiten ermitteln
If Diff < 0 Then Diff = Diff + 1 'Tageswechsel ausgleichen
'Zeitdifferenz (mit Zeilenumbruch vorweg) formatiert der Ausgabe hinzufügen
Ausgabe = Ausgabe & vbCrLf & FormatDateTime(Diff, vbLongTime)
End If
End If
Next
WScript.Echo Mid(Ausgabe, 3) 'Ausgabe ohne ersten Zeilenumbruch (=Leerzeile) anzeigen
Grüße
bastla
Hallo Patrick,
ich probiere es mal mit einem Mix aus Batch und VBScript.
In den Zeilen 9-15 wird ein temporäres VBScript erzeugt, das die Zeitdifferenz zwischen zwei als Parametern übergebenen Uhrzeiten in Sekunden berechnen kann und das Ergebnis an das aufrufende Batchfile zurück gibt. Im Batchfile ist dieses Ergebnis über die Variable ERRORLEVEL erreichbar.
In der FOR-Schleife in Zeile 17-21 wird nach dem String "Zeitwert1" gesucht. Die Nummer der Zeile steht in der Laufvariablen %%n. Daraus wird die Anzahl Zeilen errechnet, die beim Auslesen von Uhrzeit 1 und Uhrzeit 2 vom Anfang von test.html aus übersprungen werden müssen, um als erste Zeile genau die Zeile mit der entsprechenden Uhrzeit auszugeben.
Das Auslesen wird im Unterprogramm ProcessLine erledigt. MORE +X "Dateiname" ließt die Datei "Dateiname" aus und überspringt dabei X Zeilen vom Anfang der Datei. Die Laufvariable %%a der beiden FOR-Schleifen enthält die gewünschte Uhrzeit mit einem vorangestellten Anführungszeichen. Nach dem ersten Durchlauf der FOR-Schleife (also nach dem Verarbeiten der ersten Ausgabe-Zeile) wird durch die GOTO-Befehle in Zeile 31 bzw. 37 die Schleife abgebrochen.
Beim Aufruf des VBScripts werden die Uhrzeit-Strings erst ab dem 2. Zeichen (Offset 1) bis zu ihrem Ende übergeben (wegen dem vorangestellten Anführungszeichen).
Voraussetzung für eine korrekte Funktion ist, das der angegebene Aufbau der Zeilen mit den Uhrzeiten in test.html stimmt.
[Edit]
Mist, schon wieder zu langsam
Gruß
Friemler
ich probiere es mal mit einem Mix aus Batch und VBScript.
@echo off
setlocal
set "SearchFile=C:\test.html"
set "VBSCode=%TEMP%\TimeDiff.vbs"
(echo Set listArgs=WScript.Arguments
echo If listArgs.Count = 2 Then
echo WScript.Quit DateDiff^("s",listArgs^(0^),listArgs^(1^)^)
echo Else
echo WScript.Quit 0
echo End If
) > "%VBSCode%"
for /f "delims=:" %%n in ('findstr /n /c:"Zeitwert1" "%SearchFile%"') do (
set /a "lineNumber1=%%n+1"
set /a "lineNumber2=%%n+3"
call :ProcessLine
)
del "%VBSCode%"
exit /b
:ProcessLine
for /f "delims=< " %%a in ('more +%lineNumber1% "%SearchFile%"') do (
set "timestamp1=%%a"
goto NextLine
)
:NextLine
for /f "delims=< " %%a in ('more +%lineNumber2% "%SearchFile%"') do (
set "timestamp2=%%a"
goto Output
)
:Output
cscript /nologo "%VBSCode%" "%timestamp1:~1%" "%timestamp2:~1%"
echo Zeitdifferenz: %ERRORLEVEL%s
exit /b
In den Zeilen 9-15 wird ein temporäres VBScript erzeugt, das die Zeitdifferenz zwischen zwei als Parametern übergebenen Uhrzeiten in Sekunden berechnen kann und das Ergebnis an das aufrufende Batchfile zurück gibt. Im Batchfile ist dieses Ergebnis über die Variable ERRORLEVEL erreichbar.
In der FOR-Schleife in Zeile 17-21 wird nach dem String "Zeitwert1" gesucht. Die Nummer der Zeile steht in der Laufvariablen %%n. Daraus wird die Anzahl Zeilen errechnet, die beim Auslesen von Uhrzeit 1 und Uhrzeit 2 vom Anfang von test.html aus übersprungen werden müssen, um als erste Zeile genau die Zeile mit der entsprechenden Uhrzeit auszugeben.
Das Auslesen wird im Unterprogramm ProcessLine erledigt. MORE +X "Dateiname" ließt die Datei "Dateiname" aus und überspringt dabei X Zeilen vom Anfang der Datei. Die Laufvariable %%a der beiden FOR-Schleifen enthält die gewünschte Uhrzeit mit einem vorangestellten Anführungszeichen. Nach dem ersten Durchlauf der FOR-Schleife (also nach dem Verarbeiten der ersten Ausgabe-Zeile) wird durch die GOTO-Befehle in Zeile 31 bzw. 37 die Schleife abgebrochen.
Beim Aufruf des VBScripts werden die Uhrzeit-Strings erst ab dem 2. Zeichen (Offset 1) bis zu ihrem Ende übergeben (wegen dem vorangestellten Anführungszeichen).
Voraussetzung für eine korrekte Funktion ist, das der angegebene Aufbau der Zeilen mit den Uhrzeiten in test.html stimmt.
[Edit]
Mist, schon wieder zu langsam
Gruß
Friemler
Hallo Friemler!
Da ich mich nicht traue, meine Batches aus Schleifen springen zu lassen (auch wenn's Performancevorteile bringt), würde ich die Zeilen 29 bis 32 durch
ersetzen oder alternativ ein "
Grüße
bastla
Da ich mich nicht traue, meine Batches aus Schleifen springen zu lassen (auch wenn's Performancevorteile bringt), würde ich die Zeilen 29 bis 32 durch
set "timestamp1="
for /f "delims=< " %%a in ('more +%lineNumber1% "%SearchFile%"') do if not defined timestamp1 set "timestamp1=%%a"
findstr
" für die gesuchte Zeilennummer durchführen ...Grüße
bastla
Hallo Friemler!

Grüße
bastla
P.S.: Als Optimierung würde sich für Zeile 41 (im Vertrauen auf das am Anfang der Variablen stehende Anführungszeichen)
anbieten ...
was könnte denn bei meiner Lösung passieren?
Genau das ist mein Problem: ich weiß es nicht ... Grüße
bastla
P.S.: Als Optimierung würde sich für Zeile 41 (im Vertrauen auf das am Anfang der Variablen stehende Anführungszeichen)
cscript /nologo "%VBSCode%" %timestamp1%" %timestamp2%"
Hallo Bastla,
Pfennigfuchser
Gruß
Friemler
Zitat von @bastla:
P.S.: Als Optimierung würde sich für Zeile 41 (im Vertrauen auf das am Anfang der Variablen stehende
Anführungszeichen) ... anbieten
P.S.: Als Optimierung würde sich für Zeile 41 (im Vertrauen auf das am Anfang der Variablen stehende
Anführungszeichen) ... anbieten
Pfennigfuchser
Gruß
Friemler