dynadrate
Goto Top

In for-Schleife alle Tokens mitzählen

Hi!
Hab mir nun schon zwei mal das manual für for durchgelesen, aber entweder sehe ichs net oder es geht einfach nicht face-sad

Ich habe eine Steuerdatei, die (beispielhaft mal so) aufgebaut ist:

@Name@Vorname@Alter
@Foo@Bar@99
@nix@da@33
@blubb@@44

In Zeile 4 taucht ein Problem auf. Wenn ich das zweite token haben möchte, wird mir 44 ausgegeben. Ich vermute, weil NULL-Werte ignoriert werden. Ich brauche aber zwingend das zweite token, auch wenn es leer ist. Welche Option bleibt mir da?
Danke!

Content-Key: 92846

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

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

Mitglied: 67369
67369 Jul 24, 2008 at 13:50:14 (UTC)
Goto Top
Du könntest den Klammeraffen als Delimiter definieren.

Edit:
War nix, gerade probiert. Wenn dazwischen kein Leerzeichen ist, klappt das nicht.
Mit Hellsehen hat der Command-Interpreter leider noch nichts am Hut. face-smile

Ich würde entweder dafür sorgen, dass der "Erzeuger" der Steuerdatei dort Leerzeichen einfügt, oder die Zeile in der Batchdatei komplett einlesen und erst mal "nachbearbeiten", z. B. "@@" ersetzen durch "@ @" und dann erst Token verwenden.
Member: Biber
Biber Jul 24, 2008 at 20:14:07 (UTC)
Goto Top
Moin Dynadrate,

hab ich Euch denn gar nix beigebracht?
Demo am CMD-Prompt:
>for /f "delims=" %i in (dd.txt) do @set "in=%i" & for /f "delims=@ tokens=1-3" %a in ("!in:@@=@NULL@!") do @echo 1[%a] 2[%b] 3[%c]  
1[Name] 2[Vorname] 3[Alter]
1[Foo] 2[Bar] 3[99]
1[nix] 2[da] 3[33]
1[blubb] 2[NULL] 3[44]

[Funktioniert, wenn defaultmäßig DelayedExpansion für alle CMD-Sessions aktiviert ist.

Im Batch:
@echo off & Setlocal EnableDelayedExpansion
for /f "delims=" %%i in (dd.txt) do (  
         set "in=%%i"   
        for /f "delims=@ tokens=1-3" %%a in ("!in:@@=@NULL@!") do (  
                   echo 1[%%a] 2[%%b] 3[%%c]
 ))
Statt "NULL" kannst Du natürlich auch irgendeinen anderen Anzeigewert für "Leer" festlegen.
Is' ja jetzt Dein Batch.

Grüße
Biber