arafat
Goto Top

Inhalt aus csv Spalten aufschluesseln

Folgendes kleines Problem:

Ich habe eine csv Datei mit Inhalt:

"Text " "Zahl" "Zahlen"
"Nummer1" "01" "011 012 013"
"Nummer2" "02" "022 023 024 025"

ich möchte diese csv umformen in:


"Text " "Zahl" "Zahlen1" "Zahlen2" "Zahlen3" "Zahlen4"
"Nummer1" "01" "011" "012" "013" ""
"Nummer2" "02" "022" 023" 024" "025"

Fragt sich jetzt nur ob es dafür ein kleines Script gibt?

Vielen Dank schon mal im voraus.

Gruß Markus

Content-ID: 90198

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

Ausgedruckt am: 22.11.2024 um 21:11 Uhr

bastla
bastla 19.06.2008 um 13:56:36 Uhr
Goto Top
Hallo Arafat!

Etwa so:
@echo off & setlocal
echo "Text " "Zahl" "Zahlen1" "Zahlen2" "Zahlen3" "Zahlen4">D:\Ziel.csv  
for /f "skip=1 tokens=1,2*" %%i in (D:\Quell.csv) do for /f "tokens=1-4" %%a in (%%k) do @echo %%i %%j "%%a" "%%b" "%%c" "%%d">>D:\Ziel.csv  
Grüße
bastla
Arafat
Arafat 19.06.2008 um 14:30:27 Uhr
Goto Top
das klappt!

was aber wenn

"Text " "Zahl" "Zahlen" "Name"
"Nummer1" "01" "011 012 013" "Peter"
"Nummer2" "02" "022 023 024 025" "Micha"
"Nummer3" "03" "033 034" "Seb"

also die zu teilende Zelle von der Größe nicht bekannt ist udn danach noch weiter "einzel Zellen" kommen?

Danke aber trotzdem!!!!
bastla
bastla 19.06.2008 um 16:49:10 Uhr
Goto Top
Hallo Arafat!

Soferne die Maximalanzahl an aus der Zerlegung des "Spezialfeldes" entstehenden Feldern bekannt ist, etwa so:
@echo off & setlocal
set "Quelle=D:\Quell.csv"  
set "Ziel=D:\Ziel.csv"  
set /a FeldNr=3

echo "Text " "Zahl" "Zahlen1" "Zahlen2" "Zahlen3" "Zahlen4" "Name">"%Ziel%"  
for /f "usebackq skip=1 delims=" %%i in ("%Quelle%") do set "Zeile=%%i" & call :ProcessLine  
goto :eof

:ProcessLine
set /a Nr=1
set ZeileNeu=
for %%a in (%Zeile%) do call :ProcessField %%a
echo %ZeileNeu:~1%>>"%Ziel%"  
goto :eof

:ProcessField
set Feld=%1
if %Nr% neq %FeldNr% goto :Hinzu
for /f "tokens=1-4" %%a in (%1) do set "Feld="%%a" "%%b" "%%c" "%%d""  

:Hinzu
set "ZeileNeu=%ZeileNeu% %Feld%"  
set /a Nr+=1
goto :eof
Als %FeldNr% ist das weiter zu zerlegende Feld (im Beispiel also "Zahlen") anzugeben. Die Anzahl der Teile wird durch "tokens=1-4" und die Verwendung von "%%a" bis "%%d" im Programmteil ":ProcessField" festgelegt.

Grüße
bastla
Arafat
Arafat 20.06.2008 um 12:17:59 Uhr
Goto Top
Hallo bastla,

das Skript funktioniert ganz gut - nur schrieb er mir nur die erste Zeile in die Datei (Zeile 06) - alle weiter werden auf der console ausgegeben.

DAnke für deine Hilfe

Gruß Markus
bastla
bastla 20.06.2008 um 14:07:16 Uhr
Goto Top
Hallo Arafat!

... alle weiter werden auf der console ausgegeben.
Kann ich mir nicht erklären, da die Zieldatei ja als Variable, welche sich nach der Zeile 3 nicht mehr ändert, angegeben ist - wenn also in Zeile 06 in die Datei geschrieben wird, müsste das auch Zeile 14 tun ...

Anyhow, versuch es mit dieser Zeile 14:
>>"%Ziel%" echo %ZeileNeu:~1%  
Grüße
bastla
Arafat
Arafat 20.06.2008 um 15:52:00 Uhr
Goto Top
Yes!

das ist es!

Vielen Dank!