jschneider
Goto Top

for auf Zeilen in denen Kein Wert zwischen Delimitern steht

Hallo,


ich habe eine Ausgangsdatei auf deren Aufbau ich keinen Einfluss habe. Diese kommt in etwa so:


Bitte (aufeinanderfolgende) Delimiter beachten
Name;Vorname;;Emailadresse;Kennwort;;;;;;;Stadt
oder so
Name;Vorname;Professor;Emailadresse;Kennwort;;Abteilung;;;;;Stadt

in einer For /F - Schleife werden nur die Strings ausgewertet die einen Wert haben.
Da sich jedoch nie ganz genau sagen lässt welche Werte gefüllt sind muss ich alles in Variablen packen, auch Strings die eigentlich keinen Inhalt haben


Konnte ich mich begreiflich ausdrücken ? geht das irgendiwe ?


Gruß, Jan

Content-ID: 116697

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

Ausgedruckt am: 04.11.2024 um 18:11 Uhr

77559
77559 25.05.2009 um 11:23:28 Uhr
Goto Top
Hallo Jan.

Dann werte doch die Zeile nicht direkt aus, sondern mach vorher eine Ersetzung

@echo off
setlocal EnableDelayedExpansion
For /f "Delims=" %%A in ( wasauchimmer) Do set "Zeile=%%A"& for %%B in ("!Zeile:;=" "!") do echo %%~B  

Ansonsten müsstest du schon ein etwas ausführlicheres Beispiel geben.

Gruß
LotPings
jschneider
jschneider 25.05.2009 um 12:02:29 Uhr
Goto Top
Zitat von @77559:
Hallo Jan.

Dann werte doch die Zeile nicht direkt aus, sondern mach vorher eine
Ersetzung


Hallo LotPings,

auf die Idee bin ich gar nicht gekommen. Danke dir hierfür.

letzendlich nutze ich nun folgenden Code, den ich passend für meine Anforderung auch hier im Forum gefunden habe. . .

@echo off & setlocal enabledelayedexpansion
set "Datei=D:\Test.txt"  
set "t=D:\Temp.tmp"   

set "Suchen1=;;"  
set "Ersetzen1=;-;"  
set "Suchen2=;;"  
set "Ersetzen2=;-;"  

if exist "%t%" del "%t%"  
for /f "delims=" %%i in ('findstr /n $ "%Datei%"') do set "Line=%%i" & call :ProcessLine  
 move "%t%" "%Datei%"  
goto :eof

:ProcessLine
for /f "tokens=1* delims=:" %%a in ("%Line%") do set "L=%%b"  
if not defined L >>"%t%" echo\& goto :eof  
set WriteLine1=!L:%Suchen1%=%Ersetzen1%!
set WriteLine2=!WriteLine1:%Suchen2%=%Ersetzen2%!
>>"%t%" echo !WriteLine2!  
goto :eof