dennis89
Goto Top

If Else mit CSV Export Powerhell

Hallo,

ich steh hier jetzt auf dem Schlauch. Ich komme hier nicht weiter.
Ich habe eine Spalte, die heißt Artikelnummer. In der Spalte steht die Artikelnummer mit der Variante sprich so:

125411-400g-2454
121584-1kg-1214

Artikelnummer-Variantenwert-Artikelnummer

Jetzt möchte ich die Spalten auslesen da Sie berechnet werden müssen mit dem Einkaufspreis da ich nur 1kg Preise habe muss ich die dann dementsprechend auf 200,400,600,800g runterechnen.

Ich scheitere aber schon an der einfachen If Else Logik, oder auch switch.

Ich habe jetzt das hier:

Import-Csv "C:\Users\Chef\Desktop\JTL-Export-Artikeldaten-111092018.csv" -Encoding Default -delimiter ";"   
Select-Object "Match" |   
ForEach-Object {
If ($_.Artikelnummer -match '-400g') {   
     $_.Match = "200"   
} Else { 
    "400g"   
}
}
Export-Csv "C:\Users\Chef\Desktop\JTL-Export-Artikeldaten-111092018gggg.csv" -notypeinformation -Encoding Default  

Ich habe noch eine Spalte hinzugefügt die heißt "Match", wenn sozusagen ein 400g Treffer war dann soll er 400 in die Matchspalte einfügen.Damit ich die dann auf den Einkaufspreis berechnen lassen kann. der in spalte "Einkaufspreis" steht.

Ich bekomme jetzt folgenden "Fehler"

Cmdlet Export-Csv an der Befehlspipelineposition 1
Geben Sie Werte für die folgenden Parameter an:
InputObject:


Ich komme hier einfach nicht weiter, vielleicht kann mir hier jemand helfen, darüber wäre ich sehr dankbar.

Gruß
Dennis

Content-Key: 386119

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

Printed on: April 26, 2024 at 03:04 o'clock

Member: Kraemer
Kraemer Sep 11, 2018 at 17:29:26 (UTC)
Goto Top
Moin,

du importierst die CSV ins Nirvana und versuchst dann ein Nichts in eine CSV zu exportieren. Entweder musst du Variablen verwenden, oder das Ganze mittels Pipe (|) regeln.

Gruß
Member: dennis89
dennis89 Sep 12, 2018 at 04:45:14 (UTC)
Goto Top
Hey Kreamer,

ja hmm.. wozu benötige ich eine Variable? Ich Importiere die dann wird Sie abgefragt, angepast und exportiert.

Kannst du mir ein Beispiel hier gebe, das wär klasse
Gruß
Dennis
Member: erikro
erikro Sep 12, 2018 at 06:14:06 (UTC)
Goto Top
Moin,

Zitat von @dennis89:
Import-Csv "C:\Users\Chef\Desktop\JTL-Export-Artikeldaten-111092018.csv" -Encoding Default -delimiter ";"   

Wohin importierst Du die Datei? Das muss heißen:

$arr_data = Import-Csv "C:\Users\Chef\Desktop\JTL-Export-Artikeldaten-111092018.csv" -Encoding Default -delimiter ";"   

 Select-Object "Match" |  
> ForEach-Object {
> If ($_.Artikelnummer -match '-400g') {   
>      $_.Match = "200"   
> } Else { 
>     "400g"   
> }


Nö, das geht so:

foreach($dataset in $arr_data) {
              if($_Artikelnummer -match "400g") {  
                            $_.Match = 200 # echt 200? Und was machen da die Anführungszeichen?
              }
              else {
                          # Was auch immer Du sonst machen willst. Das, was Da steht macht keinen Sinn.
             }

}
> Export-Csv "C:\Users\Chef\Desktop\JTL-Export-Artikeldaten-111092018gggg.csv" -notypeinformation -Encoding Default  

Und dann zum Schluss das Objekt wieder exportieren:

$arr_data | Export-Csv "C:\Users\Chef\Desktop\JTL-Export-Artikeldaten-111092018gggg.csv" -notypeinformation -Encoding Default  

hth

Erik
Mitglied: 137084
137084 Sep 12, 2018 updated at 07:58:17 (UTC)
Goto Top
Powerhell
Sorry, aber das passt zu deinem Quelltext face-big-smile

Ich würde das so machen wenn in der CSV schon die Kilopreise in der Spalte Einkaufspreis stehen. Damit werden diese an die Menge des Artikels automatisch angepasst ohne extra eine Spalte Match erstellen zu müssen.
$csv = Import-Csv "C:\Users\Chef\Desktop\JTL-Export-Artikeldaten-111092018.csv" -Encoding Default -delimiter ";"    

$csv | ?{$_.Artikelnummer -match '-(\d+)(k?g)-'} | %{  
    $faktor = @{'g'=[int]$matches[1] /1000;'kg'=[int]$matches[1]}[($matches[2])]  
    $_.Einkaufspreis = ([decimal]::Parse($_.Einkaufspreis,[cultureinfo]::GetCultureInfo('de')) * $faktor).toString().replace('.',',')  
}
$csv | Export-Csv "C:\Users\Chef\Desktop\JTL-Export-Artikeldaten-111092018gggg.csv" -notypeinformation -Encoding Default  
Member: dennis89
dennis89 Sep 12, 2018 at 07:04:29 (UTC)
Goto Top
Moin ElMano,

ja das wäre ja richtig, aber ich habe ja keine Eindeutigen "Grammzahlen" in der Zelle. Ich habe die ja so stehen 123456789-400g-123456
oder auch 123456789-1kg-12345678.

der Kg steht ja nur im Artikel 1KG, der muss als Grundlage genommen werden damit die 800,600,400,200G gerechnet werden können..

Oder habe ich das bei dir gerade falsch Verstanden ?

ich habe da mal ein Bild hinzugefügt.
excelartikel
Mitglied: 137084
137084 Sep 12, 2018 updated at 07:09:24 (UTC)
Goto Top
Zitat von @dennis89:

Moin ElMano,

ja das wäre ja richtig, aber ich habe ja keine Eindeutigen "Grammzahlen" in der Zelle. Ich habe die ja so stehen 123456789-400g-123456
oder auch 123456789-1kg-12345678.
Na und, das berücksichtigt mein Skript bereits! Es berechnet den passenden Faktor egal ob da KG oder g stehen automatisch, so dass dieser direkt mit dem Kilopreis des EK multipliziert werden kann.
Member: dennis89
dennis89 Sep 12, 2018 at 07:51:02 (UTC)
Goto Top
ok, aber ich habe das Script eben ausprobiert.

ich bekomme eine Fehlermeldung und komme nicht zum gewünschtem Ziel..

muss ich da noch etwas machen?

Also wenn ich das richtig verstanden habe nimmt das Script den Einkaufspreis vom KG Artikel und berechnet die dann für die 200,400,600,800 g Artikel, richitg ? weil ich steige da garnicht durch.. Sorry
ausführung
nachpowershell
Mitglied: 137084
137084 Sep 12, 2018 updated at 08:09:20 (UTC)
Goto Top
Tja, wenn man so "intelligent" ist und die Zeilennummern mit ins Skript kopiert, kann man nur sagen Koppschüttel, sorry. Hier will sich offensichtlich nur wieder jemand seine Arbeit machen lassen die er vom Cheffe aufgedrückt bekommen hat.
I'm out.
Member: dennis89
dennis89 Sep 12, 2018 at 08:23:09 (UTC)
Goto Top
Ich hatte die natürlich Entfernt.

ja das ändert nix an der Sache.
Member: Kraemer
Kraemer Sep 12, 2018 at 09:02:44 (UTC)
Goto Top
Zitat von @dennis89:

Ich hatte die natürlich Entfernt.
wenn das so wäre, hättest du doch sicherlich neue Screenshots hier eingestellt, oder?
Member: dennis89
dennis89 Sep 12, 2018 at 09:06:32 (UTC)
Goto Top
kann ich gerne machen :D
sript
Member: dennis89
dennis89 Sep 12, 2018 at 09:08:27 (UTC)
Goto Top
Ich teste auch die andere Varianten,

$arr_data = Import-Csv "C:\Users\Chef\Desktop\JTL-Export-Artikeldaten-111092018.csv" -Encoding Default -delimiter ";"   
foreach($dataset in $arr_data) { 
              if($_Artikelnummer -match "200g") {   
                            $_.Einkaufspreis = 20 
             } 
                          } 
             $arr_data | Export-Csv "C:\Users\Chef\Desktop\JTL-Export-Artikeldaten-111092018ggggg.csv" -notypeinformation -Encoding Default  
Bekomme ich kein Fehlercode aber er schreibt nicht in das Feld Einkaufspreis..
Member: Kraemer
Kraemer Sep 12, 2018 at 09:19:03 (UTC)
Goto Top
Warum nutzt du nicht einfach >nur< den Code, der dir vorgeschlagen wurde?
Das da oben von dir ist faktisch gerade aus der Hölle entsprungen...
Member: dennis89
dennis89 Sep 12, 2018 updated at 09:46:59 (UTC)
Goto Top
Ich arbeite jetzt erst seit 3 Monaten mit Powershell, ich kann ein paar sachen schon aber halt soetwas überhaupt nciht, ich versuche das ja zu verstehen aber wenn man mir da den Code so hinballert muss ich den erstmal für mich zerlegen um auf meine Bedürfnisse anzupassen.

Welche Code meist du ? der von ElMano funktioniert nicht, irgendwas mit replace.. wenn ich ein Bindestrich davor setze geht das auch nicht.. und da ich es noch nichts verstehe das ding auseinander zulegen kann ich mit dem Code nichts anfangen.
Member: Kraemer
Kraemer Sep 12, 2018 at 09:55:06 (UTC)
Goto Top
Zitat von @dennis89:

Ich arbeite jetzt erst seit 3 Monaten mit Powershell,
soo lange arbeite ich auch noch nicht mit der PS

ich kann ein paar sachen schon aber halt soetwas überhaupt nciht,
das macht ja nichts. Hier wird oft gerne geholfen

ich versuche das ja zu verstehen aber wenn man mir da den Code so hinballert muss ich den erstmal für mich zerlegen um auf meine Bedürfnisse anzupassen.
nein! Der, der versucht zu helfen, geht davon aus, dass sein Code die Problemstellung löst. Wenn du den Code nicht verstehst, musst du lesen und debuggen und danach evtl. nach einer Erklärung fragen. Das o.g. Konstrukt ist mir auch nicht geläufig - lerne also gerade selbst wieder dazu


Welche Code meist du ? der von ElMano
jep

funktioniert nicht,
das ist keine Fehlermeldung / Fehlerbeschreibung!

irgendwas mit replace..
88

wenn ich ein Bindestrich davor setze geht das auch nicht..
wovor setzt du ein - ?

und da ich es noch nichts verstehe das ding auseinander zulegen kann ich mit dem Code nichts anfangen.
eine Aussage, die einem übel genommen werden kann!
Member: dennis89
dennis89 Sep 12, 2018 at 10:16:39 (UTC)
Goto Top
Der Code von ElMano funktioniert nicht.. schau ..
PS C:\Users\Chef\Documents\Datenverarbeitung\Powerscript> $csv = Import-Csv "C:\Users\Chef\Desktop\JTL-Export-Artikeldaten-111092018.csv" -Encoding Default -delimiter ";"     
$csv | ?{$_.Artikelnummer -match '-(\d+)(k?g)-'} | %{   

    $faktor = @{'g'=[int]$matches[1] /1000;'kg'=[int]$matches[1]}[($matches[2])]   

    $_.Einkaufspreis = ([decimal]::Parse($_.Einkaufspreis,[cultureinfo]::GetCultureInfo('de')) * $faktor).toString().replace('.',',')  
    } 
$csv | Export-Csv "C:\Users\Chef\Desktop\JTL-Export-Artikeldaten-111092018gggg.csv" -notypeinformation -Encoding Default  
WARNUNG: Mindestens ein Header war nicht angegeben. Für jeden fehlenden Header wurde ein mit "H" beginnender Standardname verwendet.  
Ausnahme beim Aufrufen von "Parse" mit 2 Argument(en):  "Die Eingabezeichenfolge hat das falsche Format."  
In Zeile:6 Zeichen:5
+     $_.Einkaufspreis = ([decimal]::Parse($_.Einkaufspreis,[cultureinf ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : FormatException
 
Ausnahme beim Aufrufen von "Parse" mit 2 Argument(en):  "Die Eingabezeichenfolge hat das falsche Format."  
In Zeile:6 Zeichen:5
+     $_.Einkaufspreis = ([decimal]::Parse($_.Einkaufspreis,[cultureinf ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : FormatException
 
Ausnahme beim Aufrufen von "Parse" mit 2 Argument(en):  "Die Eingabezeichenfolge hat das falsche Format."  
In Zeile:6 Zeichen:5
+     $_.Einkaufspreis = ([decimal]::Parse($_.Einkaufspreis,[cultureinf ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : FormatException
 
Ausnahme beim Aufrufen von "Parse" mit 2 Argument(en):  "Die Eingabezeichenfolge hat das falsche Format."  
In Zeile:6 Zeichen:5
+     $_.Einkaufspreis = ([decimal]::Parse($_.Einkaufspreis,[cultureinf ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : FormatException
 
Ausnahme beim Aufrufen von "Parse" mit 2 Argument(en):  "Die Eingabezeichenfolge hat das falsche Format."  
In Zeile:6 Zeichen:5
+     $_.Einkaufspreis = ([decimal]::Parse($_.Einkaufspreis,[cultureinf ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : FormatException
 
Ausnahme beim Aufrufen von "Parse" mit 2 Argument(en):  "Die Eingabezeichenfolge hat das falsche Format."  
In Zeile:6 Zeichen:5
+     $_.Einkaufspreis = ([decimal]::Parse($_.Einkaufspreis,[cultureinf ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : FormatException
 
Ausnahme beim Aufrufen von "Parse" mit 2 Argument(en):  "Die Eingabezeichenfolge hat das falsche Format."  
In Zeile:6 Zeichen:5
+     $_.Einkaufspreis = ([decimal]::Parse($_.Einkaufspreis,[cultureinf ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : FormatException
 
Ausnahme beim Aufrufen von "Parse" mit 2 Argument(en):  "Die Eingabezeichenfolge hat das falsche Format."  
In Zeile:6 Zeichen:5
+     $_.Einkaufspreis = ([decimal]::Parse($_.Einkaufspreis,[cultureinf ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : FormatException
 
Ausnahme beim Aufrufen von "Parse" mit 2 Argument(en):  "Die Eingabezeichenfolge hat das falsche Format."  
In Zeile:6 Zeichen:5
+     $_.Einkaufspreis = ([decimal]::Parse($_.Einkaufspreis,[cultureinf ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : FormatException
 
Ausnahme beim Aufrufen von "Parse" mit 2 Argument(en):  "Die Eingabezeichenfolge hat das falsche Format."  
In Zeile:6 Zeichen:5
+     $_.Einkaufspreis = ([decimal]::Parse($_.Einkaufspreis,[cultureinf ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : FormatException
 
Ausnahme beim Aufrufen von "Parse" mit 2 Argument(en):  "Die Eingabezeichenfolge hat das falsche Format."  
In Zeile:6 Zeichen:5
+     $_.Einkaufspreis = ([decimal]::Parse($_.Einkaufspreis,[cultureinf ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : FormatException
 
Ausnahme beim Aufrufen von "Parse" mit 2 Argument(en):  "Die Eingabezeichenfolge hat das falsche Format."  
In Zeile:6 Zeichen:5
+     $_.Einkaufspreis = ([decimal]::Parse($_.Einkaufspreis,[cultureinf ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : FormatException
 

PS C:\Users\Chef\Documents\Datenverarbeitung\Powerscript> 

Das bekomme ich als Fehlermeldung und da weiß ich nicht weiter..


Ausnahme beim Aufrufen von "Parse" mit 2 Argument(en): "Die Eingabezeichenfolge hat das falsche Format."
Member: Kraemer
Kraemer Sep 12, 2018 at 10:27:38 (UTC)
Goto Top
Und die Spalte "Einkaufspreis" gibt es auch in der CSV?
Member: dennis89
dennis89 Sep 12, 2018 at 10:37:00 (UTC)
Goto Top
ja, bild habe ich nochmal hinzugefügt
excel
Mitglied: 137084
137084 Sep 12, 2018 updated at 10:45:49 (UTC)
Goto Top
Kann ja auch nicht gehen weil ich deine tatsächlichen Bedingungen bis zu meinem Code noch nicht kannte und das die Einkaufspreis Spalte leer sein kann, das ist der Grund! Außerdem muss für deine Bedingungen das Skript komplett umgeschrieben werden!

Für funktionsfähigen Code für deine geschilderte Anforderung, gerne PN schicken.

Ist ja sonst eh für niemanden nützlich außer dir da die Anforderung so speziell ist.
Member: erikro
Solution erikro Sep 12, 2018 updated at 11:34:16 (UTC)
Goto Top
Moin,

Zitat von @dennis89:
Ich teste auch die andere Varianten,

 if($_Artikelnummer -match "200g") {   
> 
Bekomme ich kein Fehlercode aber er schreibt nicht in das Feld Einkaufspreis..

Oops, da habe ich was übersehen. Das muss so aussehen. Sorry.

if($dataset.Artikelnummer -match "200g")  

<edit>Und weiter unten natürlich auch statt $_.Einkaufspreis $dataset.Einkaufspreis</edit>

hth

Erik
Mitglied: 137084
Solution 137084 Sep 12, 2018 updated at 14:27:53 (UTC)
Goto Top
Die Powerhölle ist zugefroren. Thema erledigt.

Haken nicht vergessen.