CSV per Batch bearbeiten und als neue csv speichern
Hallo zusammen!
Ich brauche einmal Eure Hilfe.
Eine csv Datei welche per FTP Programm automatisch abgerufen wird soll wie folgt per Batch bearbeitet werden und als xy.csv gespeichert werden.
Die neue Datei soll nur Spalte 1 und die errechnete Spalte 2 enthalten. Trennzeichen ist ein "@" Zeichen
Spalte 2 errechnet sich wie folgt aus der ersten Datei:
Wenn Spalte 8<3 dann setze 0, wenn Spalte 9<4 setze 0,wenn Spalte 10<4 setze 0
Summe aus den Spalten 8+9+10 = Spalte 2
Habt Ihr da vielleicht was für mich ?
Ich brauche einmal Eure Hilfe.
Eine csv Datei welche per FTP Programm automatisch abgerufen wird soll wie folgt per Batch bearbeitet werden und als xy.csv gespeichert werden.
Die neue Datei soll nur Spalte 1 und die errechnete Spalte 2 enthalten. Trennzeichen ist ein "@" Zeichen
Spalte 2 errechnet sich wie folgt aus der ersten Datei:
Wenn Spalte 8<3 dann setze 0, wenn Spalte 9<4 setze 0,wenn Spalte 10<4 setze 0
Summe aus den Spalten 8+9+10 = Spalte 2
Habt Ihr da vielleicht was für mich ?
Please also mark the comments that contributed to the solution of the article
Content-Key: 221514
Url: https://administrator.de/contentid/221514
Printed on: April 25, 2024 at 17:04 o'clock
17 Comments
Latest comment
Hallo chaoscs und willkommen im Forum!
Das könnte zB so gehen:
Vorausgesetzt habe ich, dass als Trennzeichen ein Semikolon (siehe Zeile 4) verwendet wird und in den einzelnen Zeilen keine Trennzeichen unmittelbar aufeinander folgen (weil ein onder mehrere Felder leer sind).
Grüße
bastla
Das könnte zB so gehen:
@echo off & setlocal
set "Ein=D:\Datei.csv"
set "Aus=D:\xy.csv"
set "Delim=;"
del "%Aus%" 2>nul
for /f "usebackq tokens=1-10 delims=%Delim%" %%a in ("%Ein%") do (
if %%h lss 3 (
>>"%Aus%" echo %%a%Delim%0
) else (
if %%i lss 4 (
>>"%Aus%" echo %%a%Delim%0
) else (
if %%j lss 4 (
>>"%Aus%" echo %%a%Delim%0
) else (
set /a Summe=%%h + %%i + %%j
setlocal enabledelayedexpansion
>>"%Aus%" echo %%a%Delim%!Summe!
endlocal
)
)
)
)
Grüße
bastla
Hallo chaoscs!
Wenn D und E leer sind, müssten eigentlich zwei "@" aufeinander folgen - in diesem Fall:
Grüße
bastla
Trennzeichen ist wie beschrieben das "@" Zeichen.
Sorry - hatte ich glatt überlesen ... Wenn D und E leer sind, müssten eigentlich zwei "@" aufeinander folgen - in diesem Fall:
@echo off & setlocal
set "Ein=D:\Datei.csv"
set "Aus=D:\xy.csv"
set "Delim=@"
del "%Aus%" 2>nul
for /f "usebackq tokens=1-10 delims=%Delim%" %%a in ("%Ein%") do (
if %%g lss 3 (
>>"%Aus%" echo %%a%Delim%0
) else (
if %%h lss 4 (
>>"%Aus%" echo %%a%Delim%0
) else (
if %%i lss 4 (
>>"%Aus%" echo %%a%Delim%0
) else (
set /a Summe=%%g + %%h + %%i
setlocal enabledelayedexpansion
>>"%Aus%" echo %%a%Delim%!Summe!
endlocal
)
)
)
)
bastla
Hallo chaoscs!
Wie soll denn nun die Regel wirklich lauten: Auf jeden Fall die Summe ausgeben, oder nur, wenn eine Spalte zumindest 4 enthält, oder ... ?
Falls tatsächlich die Ausgabe der Summe ohne Bedingung gewünscht wäre, würde sich der Batchauf
reduzieren ...
Grüße
bastla
Wie soll denn nun die Regel wirklich lauten: Auf jeden Fall die Summe ausgeben, oder nur, wenn eine Spalte zumindest 4 enthält, oder ... ?
Falls tatsächlich die Ausgabe der Summe ohne Bedingung gewünscht wäre, würde sich der Batchauf
@echo off & setlocal
set "Ein=D:\Datei.csv"
set "Aus=D:\xy.csv"
set "DelimEin=@"
set "DelimAus=;"
del "%Aus%" 2>nul
for /f "usebackq tokens=1-10 delims=%DelimEin%" %%a in ("%Ein%") do (
set /a Summe=%%f + %%g + %%h
setlocal enabledelayedexpansion
>>"%Aus%" echo %%a%DelimAus%!Summe!
endlocal
)
Grüße
bastla
Hallo chaoscs!
Dann ist die Umsetzung auch einfach :
Grüße
bastla
Dann ist die Umsetzung auch einfach :
@echo off & setlocal
set "Ein=D:\Datei.csv"
set "Aus=D:\xy.csv"
set "DelimEin=@"
set "DelimAus=;"
set /a Grenze=4
del "%Aus%" 2>nul
for /f "usebackq tokens=1-10 delims=%DelimEin%" %%a in ("%Ein%") do (
set /a Summe=0
if %%f geq %Grenze% set /a Summe+=%%f
if %%g geq %Grenze% set /a Summe+=%%g
if %%h geq %Grenze% set /a Summe+=%%h
setlocal enabledelayedexpansion
>>"%Aus%" echo %%a%DelimAus%!Summe!
endlocal
)
bastla
Hallo chaoscs!
Grüße
bastla
Kann man noch eine erste Zeile mit Überschriften und eine dritte Spalte mit einer fixen Zahl einfügen?!?
Man(n) kann :@echo off & setlocal
set "Ein=D:\Datei.csv"
set "Aus=D:\xy.csv"
set "DelimEin=@"
set "DelimAus=;"
set /a Grenze=4
set /a Fix=42
>"%Aus%" echo xx%DelimAus%xy%DelimAus%xz
for /f "usebackq tokens=1-10 delims=%DelimEin%" %%a in ("%Ein%") do (
set /a Summe=0
if %%f geq %Grenze% set /a Summe+=%%f
if %%g geq %Grenze% set /a Summe+=%%g
if %%h geq %Grenze% set /a Summe+=%%h
setlocal enabledelayedexpansion
>>"%Aus%" echo %%a%DelimAus%!Summe!%DelimAus%%Fix%
endlocal
)
bastla