xxleon18xx

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:

 @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%"  
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

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

erikro
erikro 17.01.2020 aktualisiert um 16:27:45 Uhr
Goto Top
Moin,

ich spare mir das mal zu zeigen, dass das in der Powershell viel einfacher geht. face-wink

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
xxleon18xx
xxleon18xx 17.01.2020 um 16:52:51 Uhr
Goto Top
Hallo Erik,

vielen Dank für den Hinweis.
Leider habe ich noch nie mit Powershell programmiert (wäre aber nicht traurig ein Beispiel zu meinem Problem zubekommen ) und kenne nur Batch.

Ich habe jetzt folgendes Problem wenn ich die Zeile:
echo "Series";"Time";"Value">"%output%"  
auskommentiere, wird nichts mehr in die neue CSV-Datei geschrieben. Wie kann ich dann weiterhin in die Datei schreiben?
em-pie
em-pie 17.01.2020 um 17:07:01 Uhr
Goto Top
Moin,

Mach mal aus deinem > ein >>

Und wenn man etwas auskommemtiert, ist es klar, dass damit dann auch nichts mehr passiert ...

Gruß
em-pie
142232
Lösung 142232 17.01.2020, aktualisiert am 20.01.2020 um 11:37:40 Uhr
Goto Top
@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  
xxleon18xx
xxleon18xx 17.01.2020 um 17:38:42 Uhr
Goto Top
Danke für den Tipp das mit dem > zu >> machen hat funktioniert und überschreibt auch nicht mehr die vorhandenen Daten
142232
142232 17.01.2020 aktualisiert um 17:40:52 Uhr
Goto Top
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 face-wink. So oben ...
ukulele-7
ukulele-7 20.01.2020 um 09:45:04 Uhr
Goto Top
Alternativ zu einer Scriptlösung würde ich dir empfehlen auf eine richtige Datenbank anstelle einer "Haupt-CSV-Datei" umzusteigen.
xxleon18xx
xxleon18xx 20.01.2020 um 11:16:15 Uhr
Goto Top
Zitat von @142232:

> @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%"  
> 

Bei dieser Version wird die Zeile:
if not exist "%output%" echo "Series";"Time";"Value">"%output%"  
glaub ich ignoriert da ich immer nur die Daten bekomme ohne Überschriften (getestet mit neu generierter CSV)
142232
142232 20.01.2020 aktualisiert um 11:24:07 Uhr
Goto Top
Zitat von @xxleon18xx:
Bei dieser Version wird die Zeile:
if not exist "%output%" echo "Series";"Time";"Value">"%output%"  
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!
xxleon18xx
xxleon18xx 20.01.2020 um 11:32:40 Uhr
Goto Top
Zitat von @142232:
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!

Auch bei einer durch das Skript neu erstellten CSV werden die Überschriften bei mir nicht mit reingeschrieben.
142232
142232 20.01.2020 aktualisiert um 11:36:39 Uhr
Goto Top
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 face-wink.

Einfach mal lesen
http://wiki.winboard.org/index.php/In_einer_Batch_datei_Pr%C3%BCfen_ob_ ....
142232
142232 20.01.2020 aktualisiert um 11:38:44 Uhr
Goto Top
set "output=File-Path""
Du hast da am Ende ein Anführungszeichen im Pfad zu viel platziert.

Geht hier einwandfrei!
xxleon18xx
xxleon18xx 20.01.2020 um 11:46:48 Uhr
Goto Top
Zitat von @142232:
Dann existiert deine Ausgabedatei die unter %output% definiert ist schon face-wink.

Ich lasse die Output-Datei in einem komplett neuen Ordner generieren über das Skript und trotzdem bekomm ich die Überschriften nicht reingeschrieben. Könnte es daran liegen das ich die "Input-Datei" in "CSV UTF 8 Trennzeichen getrennt" bekomme?
142232
142232 20.01.2020 aktualisiert um 11:55:02 Uhr
Goto Top
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.