Verhindern von überschreiben vorhandener Datensätze in CSV Datei
Hallo Zusammen,
ich habe folgendes Problem und weis nicht wie ich es lösen soll. Ich habe ein Batch-Skript geschrieben welches mir aus einer CSV-Datei den MAX-Wert ausgibt und diesen in eine neue CSV-Datei speichert. Da die "haupt" CSV-Datei täglich geändert wird und neue MAX-Werte hinzukommen sollen diese auch in die neue CSV-Datei geschrieben werden. Dies ist nicht das Problem sondern das der neue Eintrag die alten Einträge überschreibt.
Wie kann ich verhindert das der neue MAX- Wert die alten MAX-Werte überschreibt?
Mein bisheriger Code sieht so aus:
ich habe folgendes Problem und weis nicht wie ich es lösen soll. Ich habe ein Batch-Skript geschrieben welches mir aus einer CSV-Datei den MAX-Wert ausgibt und diesen in eine neue CSV-Datei speichert. Da die "haupt" CSV-Datei täglich geändert wird und neue MAX-Werte hinzukommen sollen diese auch in die neue CSV-Datei geschrieben werden. Dies ist nicht das Problem sondern das der neue Eintrag die alten Einträge überschreibt.
Wie kann ich verhindert das der neue MAX- Wert die alten MAX-Werte überschreibt?
Mein bisheriger Code sieht so aus:
@echo off
setlocal enabledelayedexpansion
set "input=File-Path"
set "output=File-Path""
set lgr=0
for /f "usebackq tokens=3 delims=;" %%i in ("%input%") do if %%i geq !lgr! set lgr=%%i
echo "Series";"Time";"Value">"%output%"
type "%input%" | findstr ";%lgr%">>"%output%"
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 536285
Url: https://administrator.de/forum/verhindern-von-ueberschreiben-vorhandener-datensaetze-in-csv-datei-536285.html
Ausgedruckt am: 19.05.2025 um 14:05 Uhr
14 Kommentare
Neuester Kommentar
Moin,
ich spare mir das mal zu zeigen, dass das in der Powershell viel einfacher geht.
hth
Erik
ich spare mir das mal zu zeigen, dass das in der Powershell viel einfacher geht.
Zitat von @xxleon18xx:
> echo "Series";"Time";"Value">"%output%" # Das ist die Zeile, in der Du die alte Datei überschreibst. Wozu jedesmal den Kopf neu schreiben?
>
hth
Erik

@echo off &setlocal enabledelayedexpansion
set "input=File-Path"
set "output=File-Path"
set lgr=0
for /f "usebackq tokens=3 delims=;" %%i in ("%input%") do if %%i geq !lgr! set lgr=%%i
if not exist "%output%" (echo "Series";"Time";"Value">"%output%")
>>"%output%" findstr /lc:";%lgr%" "%input%"
PS
Import-CSV 'D:\input.csv' -Delimiter ";" -Encoding Default | sort {[decimal]$_.Value} -Descending | select -F 1 | export-csv 'D:\output.csv' -Delimiter ";" -NoType -Encoding Default -Append

Zitat von @xxleon18xx:
Danke für den Tipp das mit dem > zu >> machen hat funktioniert und überschreibt auch nicht mehr die vorhandenen Daten
Hast aber für jeden Tag die Überschriften erneut mit drin Danke für den Tipp das mit dem > zu >> machen hat funktioniert und überschreibt auch nicht mehr die vorhandenen Daten

Zitat von @xxleon18xx:
Bei dieser Version wird die Zeile: glaub ich ignoriert da ich immer nur die Daten bekomme ohne Überschriften (getestet mit neu generierter CSV)
Du glaubst falsch. Und nein, nur wenn die Ausgabedatei noch nicht existiert werden die Überschriften dort hineingeschrieben, so dass sie nur einmal in der ersten Zeile der Datei erstellt werden und nicht immer wieder!Bei dieser Version wird die Zeile:
if not exist "%output%" echo "Series";"Time";"Value">"%output%"

Zitat von @xxleon18xx:
Auch bei einer durch das Skript neu erstellten CSV werden die Überschriften bei mir nicht mit reingeschrieben.
Dann existiert deine Ausgabedatei die unter %output% definiert ist schon Auch bei einer durch das Skript neu erstellten CSV werden die Überschriften bei mir nicht mit reingeschrieben.
Einfach mal lesen
http://wiki.winboard.org/index.php/In_einer_Batch_datei_Pr%C3%BCfen_ob_ ....

set "output=File-Path""
Du hast da am Ende ein Anführungszeichen im Pfad zu viel platziert.Geht hier einwandfrei!

Joa da passt dein Encoding schon nicht (chcp). Mit UTF8 besser gleich die PS verwenden in Batch wird das nur Gematsche, oder wie ukulele schon schreibt gleich ne zuverlässige Datenbank dafür hernehmen und nicht so ein Anfängergedöhns aus den 80ern verbrechen was dir früher oder später 100% auf die Füße fällt.
Ich bin raus, zu viel Zeit für Nonsens verschwenden ist nicht meins.
Ciao.
Ich bin raus, zu viel Zeit für Nonsens verschwenden ist nicht meins.
Ciao.