sblmobil
Goto Top

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

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

Kraemer
Kraemer 28.08.2019 um 16:19:06 Uhr
Goto Top
Moin,

und dein Problem liegt nun wo?

Gruß
140913
140913 28.08.2019, aktualisiert am 29.08.2019 um 09:38:19 Uhr
Goto Top
$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   
sblmobil
sblmobil 28.08.2019 um 17:47:45 Uhr
Goto Top
Das ich davon keine Ahnung hab.
sblmobil
sblmobil 28.08.2019 um 19:11:40 Uhr
Goto Top
Vielen Dank für die schnelle Antwort,
leider hab ich es damit auf die schnelle auch nicht hinbekommen.
Setz mich da nachher nochmal ran

Gruß
140913
140913 28.08.2019 aktualisiert um 20:08:39 Uhr
Goto Top
Zitat von @sblmobil:
leider hab ich es damit auf die schnelle auch nicht hinbekommen.
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.
Mikrofonpartner
Mikrofonpartner 28.08.2019 um 20:37:19 Uhr
Goto Top
Zitat von @sblmobil:

Das ich davon keine Ahnung hab.

Zitat von @sblmobil:
Setz mich da nachher nochmal ran

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
sblmobil
sblmobil 28.08.2019 um 21:01:15 Uhr
Goto Top
Hallo Mirko,

hatte gelesen das sowas mit Powershelll Funktioniert, hab aber leider keinen Plan davon.
Brauche das auch nur für diese eine Anwendung und für mich selbst.
Die CSV ist ; getrennt und die zu Berechnenden werte , z.B. 1,25
Meine Idee ist folgende.

Die CSV sieht wie folgt aus.
Wert1;Wert2;Ergebnis
1,2;1,75;2,95

Ablauf wie folgt:
Einlesen der Datei daten.csv
Inhalt aus Spalte Text1 mit Spalte Text2 addieren und in Spalte Ergebnis ausgegeben.
Speichern in Datei daten_fertig.csv
Upload auf FTP-Server wäre Optimal
Das ganze soll von einer z.B. rechnen.bat ausgeführt werden.

Gruß Sven
140913
140913 28.08.2019 aktualisiert um 21:47:00 Uhr
Goto Top
Zitat von @sblmobil:
Die CSV sieht wie folgt aus.
Wert1;Wert2;Ergebnis
1,2;1,75;2,95
In dem Fall siehe Codeanpassung oben. Habe den Code auf das Komma (bzw. das deutsche Zahlenformat) angepasst.
Funktioniert einwandfrei.

Und tschö mit ö...
sblmobil
sblmobil 28.08.2019 um 22:14:26 Uhr
Goto Top
Erstmal vielen Dank für deine Hilfe.
Bei mir wird die daten.csv scheibbar eingelesen und auch die Datei daten1.csv wird erstellt.
Die Spalte Ergebnis kommt dazu jedoch sind die Zeilen wo das Ergebnis stehen sollte leer.
140913
140913 28.08.2019 aktualisiert um 23:31:58 Uhr
Goto Top
Dann hast du's nicht richtig angepasst.
Kraemer
Kraemer 29.08.2019 um 09:26:47 Uhr
Goto Top
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


Zitat von @sblmobil:
Die CSV sieht wie folgt aus.
Wert1;Wert2;Ergebnis
1,2;1,75;2,95

Zitat von @sblmobil:
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 face-wink - ansonsten funktioniert es einwandfrei


* Add-Member : Es kann kein Element mit dem Namen "Ergebnis" hinzugefügt werden, da bereits ein Element mit diesem Namen vorhanden ist.
sblmobil
sblmobil 29.08.2019 aktualisiert um 13:08:50 Uhr
Goto Top
Klappt super, vielen Dank.
Hab allerdings noch eine kleine Frage.

Wenn jetzt in der Spalte Wert1 keine Zahl steht sondern Text. Kann man auch damit rechnen oder muß ich das vorher ändern.

Beispiel
Wert1;Wert2
abc;5,85
deg;3,25
xxx;6,33

Würde gern vor der Berechnung abc durch 5,20, deg durch 8,22 und xxx durch 3,35 ersetzen und dann damit rechnen.

Gruß Sven
140913
140913 29.08.2019 aktualisiert um 13:49:27 Uhr
Goto Top
$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   
Wunschkonzert, Tschö...
140913
140913 30.08.2019 um 09:18:03 Uhr
Goto Top
Dann bitte noch als gelöst markieren.
Kraemer
Kraemer 30.08.2019 um 09:51:30 Uhr
Goto Top
Zitat von @140913:

Dann bitte noch als gelöst markieren.
warte mal ab - da kommt bestimmt noch was nachgeschoben... face-big-smile
140913
140913 30.08.2019 aktualisiert um 10:01:13 Uhr
Goto Top
Zitat von @Kraemer:
warte mal ab - da kommt bestimmt noch was nachgeschoben... face-big-smile
Das habe ich schon per PN reichlich abgefackelt face-big-smile.
Kraemer
Lösung Kraemer 30.08.2019 um 10:03:56 Uhr
Goto Top
👍👍👍