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-Key: 116697

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

Printed on: April 19, 2024 at 07:04 o'clock

Mitglied: 77559
77559 May 25, 2009 at 09:23:28 (UTC)
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
Member: jschneider
jschneider May 25, 2009 at 10:02:29 (UTC)
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