samy0025
Goto Top

PowerShell Hilfe

Hallo Community,
ich möchte gerne das Ergebnis auf der Spalte B haben, leider finde ich die Lösung nicht.
$user= Import-Csv C:\Users\taedv12\Downloads\Aufgaben.csv
$Zahl= $user | Select-Object Zahl1, operand, Zahl2 

foreach($user in $user){

    do{
        [decimal]$zahl1 = 0
        $userinput = $user.Zahl1
    }until([decimal]::TryParse($userinput,[ref]$zahl1))
    
    
    do{
        $operator = $user.Operand
    }until($operator -match '^[-+*/]$')  



    do{
        [decimal]$zahl2 = 0
        $userinput = $user.Zahl2
    }until([decimal]::TryParse($userinput,[ref]$zahl2))

 
$result= "$zahl1,$operator, $zahl2"  
$summe = Invoke-Expression "$zahl1 $operator $zahl2"  
$ergebniss = $result,$summe


$ergebniss>> C:\Users\taedv12\Downloads\Ergebniss.csv

    }
    

Danke
screenshot 2022-09-23 102322

Content-ID: 4034047690

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

Ausgedruckt am: 22.11.2024 um 18:11 Uhr

em-pie
em-pie 23.09.2022 aktualisiert um 10:43:03 Uhr
Goto Top
Moin,

da es ja offensichtlich Schulaufgaben sind und der Lerneffekt deutlich höher ist, wenn man sich selbst das Ergebnis erarbeitet:
beschäftige dich mal mit

Mit dem Custom Object schiebst erzeugst du zwei Properties: $calc und $result. $calc ist deine zusammengesetzte Berechnung, $result dein Ergebnis.
das gesamte Object schiebst du dann per Export-CSV in eine CSV und hast beides nebeneinander.

Edit:
alternativ:
$result= "$zahl1 $operator $zahl2"  
$summe = Invoke-Expression "$zahl1 $operator $zahl2"  
$ergebnis = "$result;$summe"  


$ergebnis>> C:\Users\taedv12\Downloads\Ergebniss.csv


Gruß
em-pie
lorsumalpha
lorsumalpha 23.09.2022 um 10:43:35 Uhr
Goto Top
Könntest du eventuell die .csv-Datei abbilden? So kann ich leider nicht das ganze reproduzieren
erikro
Lösung erikro 23.09.2022 um 10:47:55 Uhr
Goto Top
Moin,

Zitat von @samy0025:
$user= Import-Csv C:\Users\taedv12\Downloads\Aufgaben.csv
$Zahl= $user | Select-Object Zahl1, operand, Zahl2 

Aha, eine Hausaufgabe. face-wink

foreach($user in $user){

Nein. Die Variablen müssen unterschiedliche Namen haben.

    do{
        [decimal]$zahl1 = 0
        $userinput = $user.Zahl1
    }until([decimal]::TryParse($userinput,[ref]$zahl1))
    
    
    do{
        $operator = $user.Operand
    }until($operator -match '^[-+*/]$')  



    do{
        [decimal]$zahl2 = 0
        $userinput = $user.Zahl2
    }until([decimal]::TryParse($userinput,[ref]$zahl2))

Das sind Endlosschleifen, falls nicht die valide Werte in den Feldern stehen. Falsche Fehlerbehandlung. Bitte nochmal machen.

$result= "$zahl1,$operator, $zahl2"  
$summe = Invoke-Expression "$zahl1 $operator $zahl2"  
$ergebniss = $result,$summe


$ergebniss>> C:\Users\taedv12\Downloads\Ergebniss.csv

    }
    

Um das zu erreichen, was Du willst, würde ich ein PS-Object konstruieren und dann mit export-csv arbeiten. Aber erst einmal alle Fehler bereinigen.

hth

Erik
SlainteMhath
SlainteMhath 23.09.2022 um 10:52:22 Uhr
Goto Top
Moin,

Könntest du eventuell die .csv-Datei abbilden? So kann ich leider nicht das ganze reproduzieren
Die csv hat den Inhalt jeder ungeraden Zeile aus dem Screenshot

@samy0025
Dir ist klar das jeder falsche Operater (oder jede nicht-Zahl) dein Script in eine Endlosschleife schickt?

lg,
Slainte
samy0025
samy0025 23.09.2022 um 11:26:45 Uhr
Goto Top
Ja, danke ihnen für die Info. Aber die Werte sind da vorgegeben.
samy0025
samy0025 23.09.2022 um 11:28:23 Uhr
Goto Top
Werde ich später machen, versuche es erstmal was mir @em-pie Versuchen.
Danke.
samy0025
samy0025 23.09.2022 um 11:28:40 Uhr
Goto Top
Danke, werde mich direkt reinlesen.
samy0025
samy0025 23.09.2022 um 11:32:45 Uhr
Goto Top
Das ist die CSV Datei
aufgabe
erikro
Lösung erikro 23.09.2022 aktualisiert um 12:13:20 Uhr
Goto Top
Moin,

Zitat von @samy0025:

Das ist die CSV Datei

Nein, das ist der Screenshot einer Exceltabelle. face-wink Wenn Du das textuell gepostet hättest, hätte ich das testen können:

$data= Import-Csv C:\Users\taedv12\Downloads\Aufgaben.csv

foreach($dataset in $data) {

# Fehlerbehandlung überlasse ich Dir selbst

$result = New-Object PS-Object -property @{
    Zahl1 = $dataset.zahl1
    Operand = $dataset.operand
    Zahl2 = $dataset.zahl2
    Ergebniss = (invoke-expression "$($dataset.zahl1) $($dataset.operand) $($dataset.zahl2)")  
}

    $result | export-csv C:\Users\taedv12\ergebnis.csv -NoTypeInformation -Delimiter ";" -Encoding UTF8 -Append  
}

Das sollte aber funktionieren.

<edit> Klammer korrigiert</edit>

hth

Erik
samy0025
samy0025 23.09.2022 um 12:45:01 Uhr
Goto Top
Ok, entschuldige Erik.

Danke für deine Hilfe

Grüß Samantha
erikro
erikro 23.09.2022 um 12:47:42 Uhr
Goto Top
Zitat von @samy0025:

Ok, entschuldige Erik.

Alles gut. Du lernst ja noch. face-wink

Danke für deine Hilfe

Gerne