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

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

Printed on: April 24, 2024 at 18:04 o'clock

Member: bastla
bastla Jun 19, 2008 at 11:56:36 (UTC)
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
Member: Arafat
Arafat Jun 19, 2008 at 12:30:27 (UTC)
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!!!!
Member: bastla
bastla Jun 19, 2008 at 14:49:10 (UTC)
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
Member: Arafat
Arafat Jun 20, 2008 at 10:17:59 (UTC)
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
Member: bastla
bastla Jun 20, 2008 at 12:07:16 (UTC)
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
Member: Arafat
Arafat Jun 20, 2008 at 13:52:00 (UTC)
Goto Top
Yes!

das ist es!

Vielen Dank!