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 ?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 221514
Url: https://administrator.de/contentid/221514
Ausgedruckt am: 23.11.2024 um 19:11 Uhr
17 Kommentare
Neuester Kommentar
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