xxleon18xx
Goto Top

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

Content-Key: 536285

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

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

Member: erikro
erikro Jan 17, 2020 updated at 15:27:45 (UTC)
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
Member: xxleon18xx
xxleon18xx Jan 17, 2020 at 15:52:51 (UTC)
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?
Member: em-pie
em-pie Jan 17, 2020 at 16:07:01 (UTC)
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
Mitglied: 142232
Solution 142232 Jan 17, 2020, updated at Jan 20, 2020 at 10:37:40 (UTC)
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  
Member: xxleon18xx
xxleon18xx Jan 17, 2020 at 16:38:42 (UTC)
Goto Top
Danke für den Tipp das mit dem > zu >> machen hat funktioniert und überschreibt auch nicht mehr die vorhandenen Daten
Mitglied: 142232
142232 Jan 17, 2020 updated at 16:40:52 (UTC)
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 ...
Member: ukulele-7
ukulele-7 Jan 20, 2020 at 08:45:04 (UTC)
Goto Top
Alternativ zu einer Scriptlösung würde ich dir empfehlen auf eine richtige Datenbank anstelle einer "Haupt-CSV-Datei" umzusteigen.
Member: xxleon18xx
xxleon18xx Jan 20, 2020 at 10:16:15 (UTC)
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)
Mitglied: 142232
142232 Jan 20, 2020 updated at 10:24:07 (UTC)
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!
Member: xxleon18xx
xxleon18xx Jan 20, 2020 at 10:32:40 (UTC)
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.
Mitglied: 142232
142232 Jan 20, 2020 updated at 10:36:39 (UTC)
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_ ....
Mitglied: 142232
142232 Jan 20, 2020 updated at 10:38:44 (UTC)
Goto Top
set "output=File-Path""
Du hast da am Ende ein Anführungszeichen im Pfad zu viel platziert.

Geht hier einwandfrei!
Member: xxleon18xx
xxleon18xx Jan 20, 2020 at 10:46:48 (UTC)
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?
Mitglied: 142232
142232 Jan 20, 2020 updated at 10:55:02 (UTC)
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.