arnesson
Goto Top

Batch: Beim einlesen einer semikolongetrennten Zeichenkette werden leere Strings übergangen

Hallo zusammen,

ich möchte eine Textdatei mit mehreren semikolongetrennten Zeilen einlesen und in generisch erzeugte Variablen (~Array) schreiben.
Inhalt der Text.txt
R1C1;;R1C3;R1C4;
R2C1;R2C2;R2C3;R2C4;
R3C1;R3C2;R3C3;R3C4;
R4C1;R4C2;R4C3;R4C4;

Die Funktion "ArrCells.bat" (siehe unten) wird von einer anderen .bat (Test.bat). An und für sich klappt das ganz gut. Nur leider werden ;; übersprungen.
Ergebnis der ersten Zeile:
R1C1= R1C1
R1C2= R1C3
R1C3= R1C4
R1C4=
Die Spalten verschieben sich also nach hinten. Der Fehler liegt in der 2. Schleife (for /F "tokens=%nCol% delims=;" %%i in ("%line%") do). Hier wird bereits das ;; übersprungen.

Ideen?
Vielen Dank!

Aufruf in Test.bat:
@echo off & setlocal 
Setlocal EnableDelayedExpansion 

CALL ArrCells.bat Line "Text.txt"   

REM Bsp. Zählschleife Line
FOR /L %%i IN (1, 1, 4) DO (
    FOR /L %%j IN (1, 1, 4) DO (
        ECHO R%%iC%%j !Line[%%i][%%j]!
    )
)
PAUSE

Funktion in ArrCells.bat
SET prefix=%1
REM das ~ignoriert einschließende "" (schneidet sie ab)  
SET sFile=%~2
SET nRow=0

FOR /F "usebackq delims=" %%a in ("%sFile%") DO (  
    SET /a nRow+=1
    SET "line=%%a"  
    CALL :ColsIni
)

:ColsIni
set nCol=1
:Cols
for /F "tokens=%nCol% delims=;" %%i in ("%line%") do (  
    SET "Wert=%%i"  
    SET "%prefix%[%nRow%][%nCol%]=!Wert!"  
    SET /a nCol+=1
goto :Cols
)

Content-Key: 327330

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

Ausgedruckt am: 28.03.2024 um 15:03 Uhr

Mitglied: rubberman
Lösung rubberman 24.01.2017 um 20:17:23 Uhr
Goto Top
Batch ist keine geeignete Sprache um CSV zu parsen. Für diverse Workarounds siehe
http://www.dostips.com/forum/viewtopic.php?f=3&t=7659

Grüße
rubberman