marsl84
Goto Top

Wert aus Textzeile prüfen und ganze Zeile in neue Textdatei verschieben

Hallo alle zusammen,

ich habe mal wieder ein Problem, bei welchen mir keine Lösung einfällt und ich auch keine finden kann face-sad

Ich möchte aus einer Textdatei jede Zeile einzeln auslesen, den 3. Wert überprüfen und wenn dieser 3. Wert der Bedienung entspricht, die ganze Zeile in Textdatei A schreiben, wenn nicht, die ganze Zeile in Textdatei B schreiben.

Mein Lösungsansatz bis jetzt:

for /f "tokens=3 delims=!" %%m in (Textdatei.txt) do (  
if %%m == bedinung (
echo %%m >> textdatei_a.txt
) else (
echo %%m >> textdatei_a.txt
)

Aber leider schreibt er mir hier natürlich nur das ausgewertete Token in die neuen Textdateien. Ich könnte jetzt alle tokens auswerten (zB: tokens=1-10) und dann alle Variablen in die Textdatei schreiben (echo %%m %%n ... >> textdatei_a.txt) aber es sind über 50 Werte in der auszuwertenden Textdatei. Das geht ja nicht wenn ich mich nicht irre oder?!

Weiß jemand Rat?

Vielen Dank schon im voraus.

Grüße,
Marsl

Content-Key: 157488

Url: https://administrator.de/contentid/157488

Printed on: April 25, 2024 at 18:04 o'clock

Member: bastla
bastla Dec 23, 2010 at 10:19:20 (UTC)
Goto Top
Hallo marsl84!

Wenn der zu prüfende Wert "speziell" genug wäre (und daher nicht auch in einem anderen "token" vorkommen kann) sollte sich das mit
findstr "!bedinung!" Textdatei.txt>>textdatei_a.txt  
findstr /v "!bedinung!" Textdatei.txt>>textdatei_b.txt  
lösen lassen - ansonsten könntest Du geschachtelte "for"-Schleifen versuchen:
for /f "delims=" %%a in (Textdatei.txt) do (  
    for /f "tokens=3 delims=!" %%m in (%%a) do (  
    if %%m==bedinung (
        echo %%a >> textdatei_a.txt
    ) else (
        echo %%a >> textdatei_b.txt
    )
)
Grüße
bastla

P.S.: Ich wollte mit der Schreibweise "Bedingung" nicht noch eine Variante ins Spiel bringen - "Bedienung" und "bedinung" sollten für den Anfang genügen ... face-wink
Member: Biber
Biber Dec 23, 2010 at 10:24:20 (UTC)
Goto Top
Moin marsi84,

du könntest eine äußere FOR/F-Anweisung zusätzlich vorschalten und dort die ganze Zeile (also FOR /F "delims="...) transportieren.

Sinngemäß und ungetestet:
FOR /F "delims=" %%i in Textdatei.txt DO (  
    for /f "tokens=3 delims=!" %%m in ("%%i") do (  
            if "%%m" == "bedinung" (  
                 echo %%i>> textdatei_a.txt
           ) else (
                echo %%i>> textdatei_b.txt
     )
)

Allerdings... ich würde erstmal prüfen, ob du es nicht einfacher mit "FindStr /i "bedingung" textdatei.txt" bzw. "FindStr /i /v "bedingung" textdatei.txt" gebacken bekommst.

Grüße
Biber
Member: marsl84
marsl84 Dec 23, 2010 at 11:26:26 (UTC)
Goto Top
Hallo,

erstmal vielen Dank für eure Antworten face-smile

ich hab jetzt die Möglichkeit mit der zusätzlichen FOR Schleife ausprobiert. An sich scheint Sie zu funktionieren, problem ist nur, dass die Zeile in der 2. Schleife ohne Tokens ankommt?! Die ! sind verschwunden?!

Jemand eine Idee? face-smile

Danke und Grüße,
Marsl
Member: bastla
bastla Dec 23, 2010 at 11:47:59 (UTC)
Goto Top
Hallo marsl84!

Wenn bei Dir auch in der ersten Schleife "delims=" steht, ist das eigentlich nur mit einer Verwendung von "setlocal enabledelayedexpansion" zu erklären ...

Grüße
bastla
Member: marsl84
marsl84 Dec 23, 2010 at 12:06:06 (UTC)
Goto Top
Ja, das kann sein, weil ich mit "setlocal enabledelayedexpansion" arbeite. Aber egal, ich habe es jetzt mit findstr gelöst. ;)

Funktioniert super.

Vielen Dank euch und ein frohes Fest!!!! face-smile

Grüße,
Marsl