Werte aus FOR-Schleife abfragen bzw. abfangen
Ich habe eine kleine Datei mit mehren Zeilen, ich muss die Zeilen mit verschiedenen sachen berechnen & ersetzen, dies ist auch kein problem, mit meiner folgenden lösung
Das ganze gerechne usw. klappt auch für jede zeile, jedoch ist das problem, das wenn
WERT2
in einer zeile steht ich diverse parameter aus WERT1 benötige.
datei sieht wie folgt aus:
WERT1
WERT1
irgendwas ....
WERT1
WERT2
WERT1
usw.
wenn ich nun WERT2 bearbeiten möchte muss der WERT1 welche _VOR_ WERT2 steht gelöscht werden! Und zudem benötige ich das %%b aus WERT1
p.s ist es möglich Rechnungen (cosinus / +/- ...) in der FOR schleife mit einzuarbeiten? - habe diese z.zt. nur seperat, wär halt nur ne "schönheitsanpassung" das mit den Rechnungen , dies ist aber nur eine optionale kleine frage am rande
Ich habe in der SUFU leider nichts genaues gefunden womit ich weiter komme... - vielleicht bin ich einfach nur zu blöd dafür :S - was ich nicht Hoffe.
.....
....
for /f "usebackq delims=" %%i in ("%alterdatei%") do (
for /f "tokens=2-4 delims=, " %%a in ("%%i") do (
set "Done="
if "%%a"=="WERT1"( echo 2%%b,9%%c, test42 )
set "Done=true"
)
if "%%a"=="WERT2" (
??? was muss hier rein?
)
...
)
Das ganze gerechne usw. klappt auch für jede zeile, jedoch ist das problem, das wenn
WERT2
in einer zeile steht ich diverse parameter aus WERT1 benötige.
datei sieht wie folgt aus:
WERT1
WERT1
irgendwas ....
WERT1
WERT2
WERT1
usw.
wenn ich nun WERT2 bearbeiten möchte muss der WERT1 welche _VOR_ WERT2 steht gelöscht werden! Und zudem benötige ich das %%b aus WERT1
p.s ist es möglich Rechnungen (cosinus / +/- ...) in der FOR schleife mit einzuarbeiten? - habe diese z.zt. nur seperat, wär halt nur ne "schönheitsanpassung" das mit den Rechnungen , dies ist aber nur eine optionale kleine frage am rande
Ich habe in der SUFU leider nichts genaues gefunden womit ich weiter komme... - vielleicht bin ich einfach nur zu blöd dafür :S - was ich nicht Hoffe.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 166259
Url: https://administrator.de/contentid/166259
Ausgedruckt am: 22.11.2024 um 19:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo der-blob und willkommen im Forum!
Ansonsten:
hinzu.
ab
Grüße
bastla
P.S.: Falls Du nicht noch irgendwo die gesamte Zeile (also "
zu
zusammenfassen lassen ...
muss der WERT1 welche _VOR_ WERT2 steht gelöscht werden!
Was meinst Du damit - aus der Datei gelöscht?Ansonsten:
Und zudem benötige ich das %%b aus WERT1
Füge- am Anfang (möglichst ohne Tippfehler, wie es mir hier in der ersten Fassung gelungen war )
setlocal enabledelayedexpansion
- nach Zeile 7
set "ParamB=%%b"
- und im "WERT2"-Teil die benötigte Verarbeitung (als Beispiel nur eine Ausgabe)
echo !ParamB!
ist es möglich Rechnungen (cosinus / +/- ...) in der FOR schleife mit einzuarbeiten?
Was per CMD berechnet werden kann, siehst Du mitset /?
Die /A-Option gibt an ...
bastla
P.S.: Falls Du nicht noch irgendwo die gesamte Zeile (also "
%%i
") am Stück brauchst, sollten sich eigentlichfor /f "usebackq delims=" %%i in ("%alterdatei%") do (
for /f "tokens=2-4 delims=, " %%a in ("%%i") do (
for /f "usebackq tokens=2-4 delims=, " %%a in ("%alterdatei%") do (
Hallo der-blob!
Etwa so (mit Deinem "vorher"-Beispiel als Inhalt der "Vorher.txt" kurz getestet):
Es wird für jede Zeile (auch wenn es eine Leerzeile ist) der "%Ein%"-Datei das Unterprogramm ":ProcessLine" mit Übergabe der Zeile (unter Anführungszeichen) als Parameter %1 aufgerufen.
Wenn diese Zeile "WERT2" enthält (falls die Überprüfung auf "nur aus WERT2 besteht" vorzunehmen wäre, könnte als Zeile 14
verwendet werden), wird sie ausgegeben und eine ev zwischengespeicherte Zeile (%Zeile%) mit "WERT1" wird verworfen.
Enthält die Zeile nicht "WERT2", wird zunächst eine ev zwischengespeicherte Zeile (%Zeile%) ausgegeben.
Dann wird geprüft, ob die aktuelle Zeile "WERT1" enthält; wenn ja, wird die Zeile zwischengespeichert und die Verarbeitung beendet (= Rücksprung aus dem Unterprogramm mit "
Enthält die aktuelle Zeile nicht "WERT1", wird sie ausgegeben und eine ev zwischengespeicherte Zeile gelöscht (wurde ja bereits ausgegeben oder ohnehin nicht benötigt).
Anzumerken wäre noch, dass Du Dich hinsichtlich des Inhaltes der Zeilen sehr bedeckt gehalten hast und ich daher nicht weiß (und nicht berücksichtigen konnte) , ob/dass zB eine Zeile mit einem ":" beginnt oder Sonderzeichen enthält ...
Grüße
bastla
Etwa so (mit Deinem "vorher"-Beispiel als Inhalt der "Vorher.txt" kurz getestet):
@echo off & setlocal
set "Ein=Vorher.txt"
set "Aus=Nachher.txt"
set "Suche1=WERT1"
set "Suche2=WERT2"
set "Zeile="
del "%Aus%" 2>nul
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Ein%"') do call :ProcessLine "%%j"
if defined Zeile >>"%Aus%" echo %Zeile%
goto :eof
:ProcessLine
echo %1|findstr "%Suche2%">nul && goto :Ausgabe
if defined Zeile >>"%Aus%" echo %Zeile%
echo %1|findstr "%Suche1%">nul && (
set "Zeile=%~1"
goto :eof
)
:Ausgabe
>>"%Aus%" echo\%~1
set "Zeile="
goto :eof
Wenn diese Zeile "WERT2" enthält (falls die Überprüfung auf "nur aus WERT2 besteht" vorzunehmen wäre, könnte als Zeile 14
if %1=="%Suche2%" goto :Ausgabe
Enthält die Zeile nicht "WERT2", wird zunächst eine ev zwischengespeicherte Zeile (%Zeile%) ausgegeben.
Dann wird geprüft, ob die aktuelle Zeile "WERT1" enthält; wenn ja, wird die Zeile zwischengespeichert und die Verarbeitung beendet (= Rücksprung aus dem Unterprogramm mit "
goto :eof
").Enthält die aktuelle Zeile nicht "WERT1", wird sie ausgegeben und eine ev zwischengespeicherte Zeile gelöscht (wurde ja bereits ausgegeben oder ohnehin nicht benötigt).
Anzumerken wäre noch, dass Du Dich hinsichtlich des Inhaltes der Zeilen sehr bedeckt gehalten hast und ich daher nicht weiß (und nicht berücksichtigen konnte) , ob/dass zB eine Zeile mit einem ":" beginnt oder Sonderzeichen enthält ...
Grüße
bastla