paddyville
Goto Top

aus Textdatei Werte aus Anführungszeichen in Variablen schreiben

Hi an alle,

ich habe ein kleines Problem was ich mit der Suchfunktion zwar gefunden habe, allerdings nicht lösen konnte.
In einer Textdatei steht in dem Format "Wert1","Wert2","Wert3", .....,"Wert12".
Ich möchte am liebsten die einzelnen Werte in Variablen sehen.

Probiert habe ich diverse Lösungen mit Sonderzeichen löschen und dann einlesen, allerdings ohne erfolg.

Hat jemand eine Idee, wie ich das machen kann?

Viele Grüße aus Hamburg

Content-Key: 108979

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

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

Member: bastla
bastla Feb 13, 2009 at 21:38:06 (UTC)
Goto Top
Hallo Paddyville und willkommen im Forum!

Wenn es genau 12 Werte sind, dann etwa so:
@echo off & setlocal
set "Datei=D:\Deine Datei.txt"  

for /f "usebackq delims=" %%i in ("%Datei%") do call :ProcessLine %%i  
goto :eof

:ProcessLine
for /L %%a in (1,1,9) do call set "W%%a=%%~%%a"  
shift
set "W10=%~9"  
shift
set "W11=%~9"  
shift
set "W12=%~9"  
echo %W1%_%W2%_..._%W12%
goto :eof
[Edit] Durch Verwendung der "for /L"-Schleife noch etwas kürzer gefasst ... [/Edit]

Grüße
bastla
Member: Paddyville
Paddyville Feb 13, 2009 at 21:44:37 (UTC)
Goto Top
Hallo bastla,

Vielen Danke für die schnelle Hilfe.
Ich bekomme eine Fehlermeldung nach den ausführen.

C:\pacs>?@
Der Befehl "?@" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

Lösche ich @echo of und lasse nur setlocal stehen kommt:

C:\pacs>?s
Der Befehl "?s" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

Sieht für mich echt komisch aus. Ist bei der Maschine ansich was faul bei mir?
Member: bastla
bastla Feb 13, 2009 at 21:50:50 (UTC)
Goto Top
Hallo Paddyville!

Kann ich leider nicht nachvollziehen.

Lass Dir vielleicht einmal den "Quelltext" des Batches anzeigen und kopiere den Code von dort ....

Grüße
bastla
Member: Paddyville
Paddyville Feb 13, 2009 at 22:01:12 (UTC)
Goto Top
Hallo bastla,

reboot und jetzt gehts wieder.
Ich kriege nur bei beiden Versionen keine Ausgabe.

Also das letzte was ich sehe ist
for /F ...
goto :eof

und das wars.
Member: bastla
bastla Feb 13, 2009 at 22:07:36 (UTC)
Goto Top
Hallo Paddyville!

"for /f" solltest Du eigentlich gar nicht sehen ...

Wenn Du von der Kommandozeile testest (und das ist für einen Batch eigentlich immer zu empfehlen), kannst Du durch Ändern des "echo off" auf "echo on" jeden Befehl vor der Ausführung anzeigen lassen und so den Ablauf besser nachvollziehen.

Grüße
bastla
Member: Paddyville
Paddyville Feb 13, 2009 at 22:17:55 (UTC)
Goto Top
Hallo bastla,

ich hab das Echo jetzt an gemacht.

Ausgabe sieht so aus:

C:\Temp>test1.bat

C:\Temp>set "Datei=test.dat"

C:\Temp>for /F "usebackq delims=" %i in ("test.dat") do call :ProcessLine %i

C:\Temp>goto :eof

C:\Temp>
Member: bastla
bastla Feb 13, 2009 at 22:30:02 (UTC)
Goto Top
Hallo Paddyville!

Dieses Ergbenis solltest Du eigentlich nur erhalten, wenn die "test.dat" leer ist oder aber Unicode enthält - in letzterem Fall versuchsweise
type test.dat>test1.dat
und dann mit "test1.dat" testen.

Grüße
bastla
Member: Paddyville
Paddyville Feb 13, 2009 at 22:40:17 (UTC)
Goto Top
Dankeschön bastla!
Es scheint dann unicode zu sein.
Jetzt wundert es mich auch nicht, dass die Lösungen die ich vorher von dir gefunden hatte nicht funktionierten.
Member: bastla
bastla Feb 13, 2009 at 22:47:48 (UTC)
Goto Top
Hallo Paddyville!

Die Konvertierung per "type" lässt sich in den Batch integrieren:
@echo off & setlocal
set "Datei=D:\test.dat"  

set DateiTemp=%temp%\Daten.dat
type "%Datei%">%DateiTemp%  

for /f "usebackq delims=" %%i in ("%DateiTemp%") do call :ProcessLine %%i  
del %DateiTemp%
goto :eof

:ProcessLine
for /L %%a in (1,1,9) do call set "W%%a=%%~%%a"  
shift
set "W10=%~9"  
shift
set "W11=%~9"  
shift
set "W12=%~9"  
echo %W1%_%W2%_..._%W12%
goto :eof
Grüße
bastla
Member: Paddyville
Paddyville Feb 13, 2009 at 23:24:25 (UTC)
Goto Top
Hallo bastla,

ich habe das script jetzt soweit fertig. Danke nochmal für den type Tipp.

Hast du zufällig noch eine Idee, wie man mit ä ö ü ß umgeht?

Damit könnte ich gleich ein zweites Problem erschlagen.

Danke und Gruß aus HH!
Member: bastla
bastla Feb 13, 2009 at 23:28:22 (UTC)
Goto Top
Hallo Paddyville!

Schreib an den Anfang des Batches ein
chcp 1252 >nul
Damit änderst Du die Codepage auf "Windows"-Format (ANSI).

Grüße
bastla