String mit Delimitern (Trennzeichen) in Substrings zerlegen?
hi,
ich suche bereits seit geraumer zeit nach einem kochrezept zum zerlegen eines strings der form
in substrings, die dann zur weiteren verarbeitung z.b. in eine datei umgeleitet werden könnten. wie man ein oder mehrere bestimmte tokens ausliest ist mir klar; was aber, wenn ich nicht weiß, wie viele tokens der string enthält und ich alle tokens auslesen will?
beispiel:
in der datei
gruß
jutzin
p.s.: es muss batch sein, bitte keine vbscript-lösungen o.ä.! ju
ich suche bereits seit geraumer zeit nach einem kochrezept zum zerlegen eines strings der form
abc;defgh;ijklmno1234;...;xyz
in substrings, die dann zur weiteren verarbeitung z.b. in eine datei umgeleitet werden könnten. wie man ein oder mehrere bestimmte tokens ausliest ist mir klar; was aber, wenn ich nicht weiß, wie viele tokens der string enthält und ich alle tokens auslesen will?
beispiel:
REM > substr.txt
FOR /F "delims=;" %%i IN (string.txt) DO ECHO %%i >> substr.txt
in der datei
string.txt
steht der string. über den string weiß ich nichts weiter als dass er keine CR/LF
enthält und die semikolons als delimiter gelten sollen.gruß
jutzin
p.s.: es muss batch sein, bitte keine vbscript-lösungen o.ä.! ju
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 46794
Url: https://administrator.de/contentid/46794
Ausgedruckt am: 22.11.2024 um 13:11 Uhr
6 Kommentare
Neuester Kommentar
Vielleicht gehts nach folgender grober Idee (ungetestet):
Du zerlegst den String. Dabei imemr nur das erste Token udn schreibst es in die Datei substr.txt, den Rest in eine temp.txt
Danach das ganze immer wieder in der temp.txt wiederholen, bis nix mehr in temp.txt geschrieben wird.
set file=substr.txt
set tempfile=temp.txt
FOR /F "tokens=1* delims=;" %%i IN (string.txt) DO ECHO %%i >> %file% && %%j > %tempfile%
:loop
FOR /F "tokens=1* delims=;" %%i IN (%tempfile%) DO ECHO %%i >> %file% && %%j > %tempfile% && if [%%j]= goto :eof
call:loop
:eof
miniversum
Du zerlegst den String. Dabei imemr nur das erste Token udn schreibst es in die Datei substr.txt, den Rest in eine temp.txt
Danach das ganze immer wieder in der temp.txt wiederholen, bis nix mehr in temp.txt geschrieben wird.
set file=substr.txt
set tempfile=temp.txt
FOR /F "tokens=1* delims=;" %%i IN (string.txt) DO ECHO %%i >> %file% && %%j > %tempfile%
:loop
FOR /F "tokens=1* delims=;" %%i IN (%tempfile%) DO ECHO %%i >> %file% && %%j > %tempfile% && if [%%j]= goto :eof
call:loop
:eof
miniversum
Moin jutzin,
willkommen im Forum.
Bitte mach mal etwas konkreter, was Du vorhast.
Beliebig viele Tokens einfach der Reihe nach auslesen geht
a) eigentlich nicht
b) zum Beispiel so:
Demo am CMD-Prompt:
Gruß
Biber
[Edit]
Tippfehler berichtigt. Alt:!%line:;= ! ------> in neu: !line:;= ! . Siehe Kommentar unten.
willkommen im Forum.
Bitte mach mal etwas konkreter, was Du vorhast.
Beliebig viele Tokens einfach der Reihe nach auslesen geht
a) eigentlich nicht
b) zum Beispiel so:
:: ---snipp 40Tokens.bat
@echo off & setlocal enableDelayedExpansion
Set testdata=eins;zwei;drei;vier;fünf;sechs;sieben;acht;neun;zehn;elf;zwölf;dreizehn
Set testdata=%testdata%;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40;
echo %testdata%>%temp%\40tokens.txt
for /f "delims=; tokens=1,*" %%i in (%temp%\40Tokens.txt) do set "Line=%%j" & call:sub %%i !line:;= ! & goto :eof
:sub
@echo %1
If [%2]== goto :eof
Shift & goto :sub
Demo am CMD-Prompt:
(= 8:57:45 D:\temp=)
>f:\administrator\40Tokens.bat
eins
zwei
drei
vier
fünf
...
34
35
36
37
38
39
40
(= 9:00:40 D:\temp=)
Gruß
Biber
[Edit]
Tippfehler berichtigt. Alt:!%line:;= ! ------> in neu: !line:;= ! . Siehe Kommentar unten.
Moin jutzin,
tja, sorry für den Tippfehler... ich nehme mir zwar immer vor, meine Bätschelchen mal zu testen, bevor ich sie poste...
...aber wie das so ist mit guten Vorsätzen...*axelzuck*
Gut, dass Du verstanden hast, was ich eigentlich gemeint habe
Den typo hab ich oben berichtigt.
Bei miniversums Variante fehlt, soweit ich das ohne Testen erkennen kann, vor dem %%j die ECHO-Anweisung.
Wenn die Zeile formatiert wird, sieht man/frau es besser:
Setzt Du bitte den Beitrag auf "gelöst", wenn es soweit klappt?
Danke
Biber
tja, sorry für den Tippfehler... ich nehme mir zwar immer vor, meine Bätschelchen mal zu testen, bevor ich sie poste...
...aber wie das so ist mit guten Vorsätzen...*axelzuck*
Gut, dass Du verstanden hast, was ich eigentlich gemeint habe
Den typo hab ich oben berichtigt.
Bei miniversums Variante fehlt, soweit ich das ohne Testen erkennen kann, vor dem %%j die ECHO-Anweisung.
Wenn die Zeile formatiert wird, sieht man/frau es besser:
...
:loop
FOR /F "tokens=1* delims=;" %%i IN (%tempfile%) DO (
ECHO %%i >> %file%
:: #####Um das ECHO in der folgenden Zeile geht es##
ECHO %%j > %tempfile%
if [%%j]= goto :eof
call:loop
)
...
Setzt Du bitte den Beitrag auf "gelöst", wenn es soweit klappt?
Danke
Biber