Per Batch oder Powershell zwei Spalten einer CSV addieren
Hallo,
ich brauche bei folgendem Problem Hilfe.
Ich möchte eine CSV-Datei einlesen und zwei Spalten addieren.
Im Prinzip möchte ich folgendes erreichen
Wert1;Wert2;Ergebniss
3;5;8
Das ganze soll dann in einer neuen CSV gespeichert werden
Sprich daten.csv einlesen, berechenen und in daten_fertig.csv speichern
Die CSV hat immer unterschiedlich viele Zeilen
Gruß Sven
ich brauche bei folgendem Problem Hilfe.
Ich möchte eine CSV-Datei einlesen und zwei Spalten addieren.
Im Prinzip möchte ich folgendes erreichen
Wert1;Wert2;Ergebniss
3;5;8
Das ganze soll dann in einer neuen CSV gespeichert werden
Sprich daten.csv einlesen, berechenen und in daten_fertig.csv speichern
Die CSV hat immer unterschiedlich viele Zeilen
Gruß Sven
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 489361
Url: https://administrator.de/forum/per-batch-oder-powershell-zwei-spalten-einer-csv-addieren-489361.html
Ausgedruckt am: 23.04.2025 um 06:04 Uhr
17 Kommentare
Neuester Kommentar

$csv = Import-CSV 'D:\daten.csv' -Delimiter ";"
$c = [cultureinfo]::GetCultureInfo('de')
$csv | Add-Member -Membertype Noteproperty -Name "Ergebnis" -Value "" -Force
$csv | %{$_.Ergebnis = ([decimal]::parse($_.Wert1,$c) + [decimal]::parse($_.Wert2,$c)).toString($c)}
$csv | Export-CSV 'D:\daten_fertig.csv' -Delimiter ";" -NoTypeInformation -Encoding UTF8

Klappt hier aber einwandfrei, leider nennst du keine weiteren Randbedingungen, wie ob Kommas oder Punkte als Dezimaltrenner genutzt werden usw. usf. Spaltennamen etc. musst du selbst redend anpassen!
Setz mich da nachher nochmal ran
Joar.Hallo
Wie soll das klappen? Entweder du hast Ahnung von der Powershell, dann stünde die Frage nicht im Raum oder du kannst damit nicht umgehen. Jetzt hier etwas Vorgekautes von pauser als seine Eigenkreation zu verkaufen, ist nicht Sinn der Sache. Willst du die Shell beherrschen, gilt es sich von Grund auf damit zu beschäftigen.
Gruß Mikro

In dem Fall siehe Codeanpassung oben. Habe den Code auf das Komma (bzw. das deutsche Zahlenformat) angepasst.
Funktioniert einwandfrei.
Und tschö mit ö...
Funktioniert einwandfrei.
Und tschö mit ö...

Dann hast du's nicht richtig angepasst.
Moin,
und das hasse ich ja - nix können und nicht einmal exakte Beispieldateien liefern...
Denn diese beiden Aussagen verraten, dass die erste nicht stimmen kann
Das Script von müsste einen Fehler* schmeißen, dass die Spalte Ergebnis schon vorhanden ist...
@140913: in deinem Script fehlt eine schließende Klammer
- ansonsten funktioniert es einwandfrei
und das hasse ich ja - nix können und nicht einmal exakte Beispieldateien liefern...
Denn diese beiden Aussagen verraten, dass die erste nicht stimmen kann
Zitat von @sblmobil:
Die Spalte Ergebnis kommt dazu jedoch sind die Zeilen wo das Ergebnis stehen sollte leer.
Die Spalte Ergebnis kommt dazu jedoch sind die Zeilen wo das Ergebnis stehen sollte leer.
Das Script von müsste einen Fehler* schmeißen, dass die Spalte Ergebnis schon vorhanden ist...
@140913: in deinem Script fehlt eine schließende Klammer
* Add-Member : Es kann kein Element mit dem Namen "Ergebnis" hinzugefügt werden, da bereits ein Element mit diesem Namen vorhanden ist.

$csv = Import-CSV 'D:\daten.csv' -Delimiter ";"
$c = [cultureinfo]::GetCultureInfo('de')
$csv | Add-Member -Membertype Noteproperty -Name "Ergebnis" -Value "" -Force
$csv | %{
$w1 = 0
$w2 = 0
$res1 = [decimal]::TryParse($_.Wert1,[System.Globalization.NumberStyles]::AllowDecimalPoint,$c,[ref]$w1)
$res2 = [decimal]::TryParse($_.Wert2,[System.Globalization.NumberStyles]::AllowDecimalPoint,$c,[ref]$w2)
if (!$res1){
switch($_.Wert1){
"abc" {$w1 = 5.20}
"deg" {$w1 = 8.33}
"xxx" {$w1 = 3.35}
}
}
$_.Ergebnis = ($w1 + $w2).toString($c)
}
$csv | Export-CSV 'D:\daten_fertig.csv' -Delimiter ";" -NoTypeInformation -Encoding UTF8

Dann bitte noch als gelöst markieren.

Das habe ich schon per PN reichlich abgefackelt
.