usenussi
Goto Top

Powershell CSV Betrag in Euro umwandeln

Hallo Experten,

ich benötige dringen Hilfe und komme nicht weiter.

Ich habe eine große csv Datei (Katalog) und bearbeite diese weiter.
Ich kann die Spalten und den Inhalt abfragen um eine neue Datei zu erzeugen.

# Hier kann der Benutzer die gewünschte Auswahl eingeben
$Spalte = Read-Host "bitte Spaltenname eingeben"  
$Auswahl = Read-Host "Bitte Suchkreterium eingeben "  

$test = Import-Csv -path D:\Preisliste\Frankana3\export2\products.csv -Delimiter ";" -Encoding UTF8 |select sku,marke,price-EUR |where $Spalte -like "$Auswahl" |select -First 3   
echo $test


#Ergebnis:
#sku marke price-EUR
#--- ----- ---------
#430/214 LAKO 4.95
#400/784 Lilie 18.5
#430/035 17.95

#Gewünschter Preis:

  1. 4,95
  2. 18,50
  3. 17,95

Meine Versuche haben alle nicht funktioniert ich bekomme die Währungen nicht hin.

#[System.Threading.Thread]::CurrentThread.CurrentCulture = "en-US"

#[System.Threading.Thread]::CurrentThread.CurrentCulture = "de-DE"

#[convert]::ToDouble('+4.95') oder Formeln wie "{0:C2}" -f $foo weiß ich nicht wie ich es einsetze.


Es wäre schön wenn ihr mir helfen würdet.

Content-ID: 666292

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

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

148121
148121 01.05.2021, aktualisiert am 02.05.2021 um 19:19:02 Uhr
Goto Top
$test = Import-Csv 'D:\Preisliste\Frankana3\export2\products.csv' -Delimiter ";" -Encoding UTF8 | where $Spalte -like $Auswahl | select sku,marke,@{n='price-EUR';e={([decimal]$_.'price-EUR').toString('0.00',[cultureinfo]'de')}} -F 3  
echo $test
GarfieldBonn
GarfieldBonn 01.05.2021 aktualisiert um 20:14:39 Uhr
Goto Top
Du kannst die Zahl in einem String umwandeln, dann am Punkt splitten und mit Komma wieder zusammensetzen. Ist dann allerdings ein String und keine Zahl!

$B=18.50
$D=("$B").Split(".")  
$E=$D+","+$D[1]  
$E

Ausgabe von $E:
18,5
usenussi
usenussi 02.05.2021 um 19:12:11 Uhr
Goto Top
Hallo vielen Dank für die schnelle Antwort, es klappt bei mir jedoch leider nicht.
ich habe die Zeile bei mir eingebaut und bekomme folgende Fehlermeldung.

  1. Hier kann der Benutzer die gewünschte Auswahl eingeben
$Spalte = Read-Host "bitte Spaltenname eingeben"
$Auswahl = Read-Host "Bitte Suchkreterium eingeben "
$test = Import-Csv -literalpath 'D:\Preisliste\Frankana3\export2\products.csv' -Delimiter ";" -Encoding UTF8 | where $Spalte -like $Auswahl | select sku,marke,@{n='price-EUR';e={([decimal]$_.'price-EUR').toString('0.00',[cultureinfo]'de')}} -F 3
echo $test

Fehlermeldung
Bei Zeile:4 Zeichen:32

back-to-top$test = Import-Csv -literalpath <<<< 'D:\Preisliste\Frankana3\export2\products.csv' -Delimiter ";" -Encoding UTF8 | where $Spalte -like $Auswahl | select

sku,marke,@{n='price-EUR';e={([decimal]$_.'price-EUR').toString('0.00',[cultureinfo]'de')}} -F 3
+ CategoryInfo : InvalidArgument: (face-smile [Import-Csv], ParameterBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.ImportCsvCommand


sku marke price-EUR
--- ----- ---------
430/214 LAKO
400/784 Lilie
430/035

wenn ich -literalpath eingeben will, wird mir dieser Befehl schon nicht zur verfügung gestellt.(nur -path) im PowerGui Script Editor.
usenussi
usenussi 02.05.2021 um 19:17:40 Uhr
Goto Top
Vielen Dank für die Antwort.
Ich kann ja $B018.50 nicht einfach in meinem Skript eingeben, es ist ja der Inhaltswert meiner Spalte.
148121
Lösung 148121 02.05.2021 aktualisiert um 19:22:02 Uhr
Goto Top
War nur ein Tippfehler, oben korrigiert. Hätte man mit Probieren auch selbst gelöst du hast es ja eigentlich schon selbst erkannt ... Dann hätte man sich den Post sparen können, steht ja alles klipp und klar in der Fehlermeldung.
usenussi
usenussi 02.05.2021 um 19:31:02 Uhr
Goto Top
Hallo,
wenn ich nur -Path eingebe bekomme ich eine weitere Fehlermeldung;

Import-Csv : Es wurde kein Parameter gefunden, der dem Parameternamen "Encoding" entspricht.

**Bei Zeile:4 Zeichen:97

back-to-top$test = Import-Csv -path 'D:\Preisliste\Frankana3\export2\products.csv' -Delimiter ";" -Encoding <<<< UTF8 | where $Spalte -like $Auswahl | select sku,ma

rke,@{n='price-EUR';e={([decimal]$_.'price-EUR').toString('0.00',[cultureinfo]'de')}} -F 3
+ CategoryInfo : InvalidArgument: (face-smile [Import-Csv], ParameterBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.ImportCsvCommand

Auch wenn ich -Encoding weglasse komme ich nicht weiter.
Anmerkung: Ich verstehe nicht warum ab $test alles Fett angezeigt wird
usenussi
usenussi 02.05.2021 um 19:44:22 Uhr
Goto Top
Hallo warranty,

Dein Skript funktioniert in PowerShell ISE.
Es liegt also an der PowerGui.

Vielen Dank für deine Arbeit.
148121
148121 02.05.2021 aktualisiert um 21:57:53 Uhr
Goto Top
Zitat von @usenussi:
Es liegt also an der PowerGui.
Das nutzt wohl nur bei dir die PS 2.0 deswegen erkennt er den Parameter -Encoding nicht, denn
den gibt es nämlich erst ab der PS Version 3.0 😉.