Powershell if -eq - or
Liebe Administratoren,
ich hänge gerade an einer simplen CSV-Auswertung via Powershell und scheinbar mache ich etwas falsch, finde aber den Fehler nicht...
Input:
Skript:
Output
Warum, bekomme ich im Output 2 mal diesen Preis? und auch, wenn die if abfrage nicht zutrifft, sonder eigentlich das else greifen sollte?
ich hänge gerade an einer simplen CSV-Auswertung via Powershell und scheinbar mache ich etwas falsch, finde aber den Fehler nicht...
Input:
"Artikelnummer";"Durchschn. EK Netto";"Kategorie Level 1";
"1";"111,11";"Zahnpflege - Elektrische Zahnbürste";
"2;"222,22";"Rasierer & Haarentferner - Epilierer";
"3";"333,33";"Rasierer & Haarentferner - Epilierer";
"4";"444,44";"PC-Games - Rollenspiele & Adventure";
Skript:
$CSV_Import= "C:\Users\Administrator\Downloads\testdatei.csv"
$CSV = import-csv $eSagu_CSV_Import -UseCulture -Encoding Default
$CSV = $CSV | select-object @{Name="SKU";Expression={$_.Artikelnummer}},@{Name="Kategorie";Expression={$_."Kategorie Level 1"}},@{Name="MIN_PRICE";Expression={1 * $_."Durchschn. EK Netto"}}
#Kategorieaufschläge
$CSV = $CSV| select-object @{Name="SKU";Expression={$_.SKU}},@{Name="MIN_PRICE";Expression={if($_."Kategorie" -eq "Einbau-Backöfen - Standard, 60 cm hoch" -or "Einbau-Backöfen - Standard, 60 cm hoch" -or "Einbau-Backöfen - Kompakt, 45 cm hoch" -or "Einbau-Backöfen - Sets mit autarken Kochfeldern" -or "Einbau-Backöfen - Standard, 60 cm hoch" -or "Einbaugeschirrspüler - Integrierbare Geschirrspüler" -or "Einbaugeschirrspüler - Unterbaugeschirrspüler" -or "Einbaugeschirrspüler - Vollintegrierbare Geschirrspüler" -or "Einbaugeschirrspüler - Integrierbare Geschirrspüler" -or "Einbaugeschirrspüler - Unterbaugeschirrspüler" -or "Einbaugeschirrspüler - Integrierbare Geschirrspüler" -or "Einbaugeschirrspüler - Unterbaugeschirrspüler" -or "Einbaugeschirrspüler - Vollintegrierbare Geschirrspüler" -or "Einbaugeschirrspüler - vollintegrierbare Kompaktgeschirrspüler" -or "Einbaukühlgeräte - Einbaugefrierschränke" -or "Einbaukühlgeräte - Einbaukühlschränke" -or "Einbaukühlgeräte - Kühl- Gefrierkombinationen" -or "Einbaukühlgeräte - Einbaugefrierschränke" -or "Einbaukühlgeräte - Einbaukühlschränke" -or "Einbaukühlgeräte - Kühl- Gefrierkombinationen" -or "Einbaukühlgeräte - Einbaugefrierschränke" -or "Einbaukühlgeräte - Einbaukühlschränke" -or "Einbaukühlgeräte - Kühl- Gefrierkombinationen" -or "Einbau-Kochstellen - Domino-Kochstelle" -or "Flachbildschirme - 4K TV (Ultra HD)" -or "Flachbildschirme - Curved TV" -or "Flachbildschirme - LED-TV" -or "Freistehende Gefriergeräte - Gefrierschränke" -or "Freistehende Gefriergeräte - Gefrierschränke" -or "Freistehende Gefriergeräte - Gefrierschränke" -or "Freistehende Gefriergeräte - Gefriertruhe" -or "Freistehende Geschirrspüler - Kompaktgeschirrspüler" -or "Freistehende Geschirrspüler - Standgeschirrspüler" -or "Freistehende Geschirrspüler - Kompaktgeschirrspüler" -or "Freistehende Geschirrspüler - Standgeschirrspüler" -or "Freistehende Geschirrspüler - Kompaktgeschirrspüler" -or "Freistehende Geschirrspüler - Standgeschirrspüler" -or "Freistehende Kühlschränke - Standkühlschränke mit Gefrierfach" -or "Freistehende Kühlschränke - Standkühlschränke ohne Gefrierfach" -or "Freistehende Kühlschränke - Standkühlschränke mit Gefrierfach" -or "Freistehende Kühlschränke - Standkühlschränke ohne Gefrierfach" -or "Freistehende Kühlschränke - Standkühlschränke mit Gefrierfach" -or "Freistehende Kühlschränke - Standkühlschränke ohne Gefrierfach" -or "Kühlen & Gefrieren - Unterbaugefrierschränke" -or "Kühlen & Gefrieren - Unterbaukühlschränke" -or "Kühlen & Gefrieren - Unterbaugefrierschränke" -or "Kühlen & Gefrieren - Unterbaukühlschränke" -or "Kühl-Gefrier-Kombination - Gefrierteil oben" -or "Kühl-Gefrier-Kombination - Gefrierteil unten" -or "Kühlen & Gefrieren - Minikühlschränke" -or "Kühlen & Gefrieren - Unterbaugefrierschränke" -or "Kühlen & Gefrieren - Unterbaukühlschränke" -or "Kühl-Gefrier-Kombination - Gefrierteil oben" -or "Kühl-Gefrier-Kombination - Gefrierteil unten" -or "Side-by-Side Kühlschrank - Freistehende Kombinationen" -or "Side-by-Side Kühlschrank - Freistehende Kombinationen" -or "Side-by-Side Kühlschrank - Freistehende Kombinationen" -or "Standherde - Elektro-Standherde" -or "Standherde - Gas-Standherde" -or "Standherde - Holz-Öfen & Landhausöfen" -or "Standherde - Holz-Öfen & Landhausöfen" -or "Standherde - Holz-Öfen & Landhausöfen" -or "Waschen & Trocknen - Wäscheschleuder" -or "Waschmaschinen - Einbauwaschmaschinen" -or "Waschmaschinen - Frontlader" -or "Waschmaschinen - Kompakt Waschmaschinen" -or "Waschmaschinen - Toplader" -or "Waschtrockner - Einbauwaschtrockner" -or "Waschtrockner - Frontlader" -or "Waschtrockner - Toplader" -or "Wäschetrockner - Ablufttrockner" -or "Wäschetrockner - Kondenstrockner" -or "Wäschetrockner - Wärmepumpentrockner"){$_.MIN_PRICE * 1.345} if($_."Kategorie" -eq "Herdset - Elektro-Einbauherdsets" -or "Herdset - Gas-Kombi-Einbauherdsets" -or "Kühlen & Gefrieren - Minikühlschränke" -or "Kühl-Gefrier-Kombination - Gefrierteil oben" -or "Kühl-Gefrier-Kombination - Gefrierteil unten" -or "Kochplatte - Induktions-Doppelkochfeld" -or "Wäschetrockner - Wärmepumpentrockner" -or "Wäschetrockner - Wärmepumpentrockner" -or "Weinkühlschrank - Freistehende Weinkühlschränke" -or "Weinkühlschrank - Weinkühler") {$_.MIN_PRICE * 1.355} else {1.485*$_.MIN_PRICE}}}
$CSV |export-csv "C:\Test21.csv" -UseCulture -notypeinformation -Encoding Default
Output
"SKU";"MIN_PRICE"
"1";"14944,295 15055,405"
"2;222,22""";" "
"3";"44832,885 45166,215"
"4";"59777,18 60221,62"
Warum, bekomme ich im Output 2 mal diesen Preis? und auch, wenn die if abfrage nicht zutrifft, sonder eigentlich das else greifen sollte?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 312732
Url: https://administrator.de/contentid/312732
Ausgedruckt am: 19.11.2024 um 22:11 Uhr
7 Kommentare
Neuester Kommentar
Hi.
To calculate with a field you first have to convert it to a number, you cannot calc with a variable of type string . If you multiply a string with a number the string is repeated (number) times, that's what you see here.
And some note to these enormous "or" constructs: It would be more efficient to store these values inside a separate array and then use the -in operator to compare if a field contains a value!
Regards
To calculate with a field you first have to convert it to a number, you cannot calc with a variable of type string . If you multiply a string with a number the string is repeated (number) times, that's what you see here.
And some note to these enormous "or" constructs: It would be more efficient to store these values inside a separate array and then use the -in operator to compare if a field contains a value!
Regards
That does not work as I said, you cannot convert a string to a number by simply multiplying it with a number! Convert it by prefixing if with the type
Or use the convert function of the types like
Sometimes you must convert the comma into a point before.
[double]$yourvariable
[decimal]::Parse('10,2')
Hey,
so wie ich das sehe geht die Abfrage immer in den IF Zweig.. liegt vermutlich daran weil du nach dem -or einen weiteren vollständigen Vergleich schreiben musst.
bsp:
in diesem vereinfachtem bsp geht das Script in den Else zweig, falls keine der Bedingungen zutrifft.
so wie ich das sehe geht die Abfrage immer in den IF Zweig.. liegt vermutlich daran weil du nach dem -or einen weiteren vollständigen Vergleich schreiben musst.
bsp:
cls
$hw = "hello World"
if($hw -eq "hello World" -or $hw -eq "Hallo Welt"){
write-host "if"
}else{
write-host "else"
}
in diesem vereinfachtem bsp geht das Script in den Else zweig, falls keine der Bedingungen zutrifft.
. liegt vermutlich daran weil du nach dem -or einen weiteren vollständigen Vergleich schreiben musst.
Sure that is essential! The operator splits the single conditions, and every condition needs to fully qualified.That's why i recommend an array for this task, its much easier to handle additions makes your code clean and shortens code.
This only happens if your file has wrong source encoding contents ...So recreate your files. Better you work with UTF-8 encoded files.
But this has nothing to do with the title of your original post!
But this has nothing to do with the title of your original post!