2-speed
Goto Top

Batch: Zahlen in einer Spalte einer CSV Datei prüfen und ggf. austauschen

Hallo zusammen,

ich hoffe Ihr könnt mir helfen.
Auf einem unserer Server läuft eine Wawi. Aus dieser exportiere ich per Batch zweimal am Tag eine Stocklist für unsere Händler und lade diese per FTP auf einen webserver zum Download.
Bei der Erstellung der Exportvorlage habe ich allerdings nur die Möglichkeit den vollen Bestand oder den Verfügbaren Bestand anzuzeigen. Bei ersterem sind aber nicht die Artikel aus bestehenden Aufträgen abgezogen. Beim verfügbaren Bestand kann es zu Minusbeständen kommen.

Jetzt zu meinem Problem.
Ich würde gerne die Werte in Spalte 4 in meiner Stocklist_exp.csv wie folgt automatisch mit einer Batch ändern.

Wenn ein negativer Bestand also z.B. -4 enthalten ist soll er gegen eine Null ersetzt werden.
Zusätzlich wollen wir nicht unseren kompletten Bestand preisgeben. Daher soll alles was einen Bestand von mehr als 5 hat auf 6 gesetzt werden.

Danach soll die Datei unter stocklist.csv gespeichert werden.

Trennzeichen ist ein ; "Semikolon"
Die Datei hat ca. 10.000 Zeilen und in Spalte 3 ist nicht immer ein Wert.

Hier mal die ersten Zeilen dieser Datei incl. Überschrift.

"Artikelnummer";"Artikelname";"EAN/Barcode";"Verfügbar";"Netto EK";"UVP";
"ZTW-120000010";"LED Programm Card";;"5,00";"8,14";"10,95";
"ZTW-180000010-A";"LCD Program Card Beast 120A / Beast Pro 150A";;"14,00";"15,04";"19,95";
"DA-742215";"Dash 540 Sensored Brushless Motor 21.5T For AM Cup";"4895175921450 ";"0,00";"43,28";"63,99";
"SER-500021";"Serpent Spyder Buggy SDX4 EVO 1/10 EP";"8717135093402";"7,00";"327,60";"445,90";
"ZTW-4215032";"Brushless ESC 1:8 Beast PRO 150A";;"21,00";"68,38";"99,95";
"ZTW-BP4269-2D";"1:8 Scale 4 Pole Sensored Brushless 1950kv";;"12,00";"75,21";"119,95";


Vielen Dank für eure Hilfe.

Content-Key: 384601

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

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

Member: Kraemer
Kraemer Aug 27, 2018 at 13:10:29 (UTC)
Goto Top
Moin,

wenn es auch Powershell sein darf, hätte ich da eine Lösung.

Gruß
Member: colinardo
colinardo Aug 27, 2018 updated at 14:09:34 (UTC)
Goto Top
Servus, kannst du bspw. so abfackeln.
@echo off
chcp 1252
powershell -Executionpolicy ByPass -NoProfile -Command "Import-Csv 'D:\Stocklist_exp.csv' -Delimiter ';'| %%{$betrag = [decimal]::Parse($_.Verfügbar,[cultureinfo]::GetCultureInfo('de')); if ($betrag -lt 0){$_.Verfügbar = 0}elseif($betrag -gt 5){$_.Verfügbar = 6};$_} | export-csv 'D:\stocklist.csv' -Delimiter ';' -NoTypeInformation -Encoding UTF8"  
Grüße Uwe
Member: 2-speed
2-speed Aug 27, 2018 at 13:47:47 (UTC)
Goto Top
Wie bastel ich das dann in meine vorhandene Batch ein ?

Gruß

Jean
Member: Kraemer
Kraemer Aug 27, 2018 at 13:49:39 (UTC)
Goto Top
Tschuldige Uwe - muss gerade lachen.

Jean: Copy and Paste
Member: colinardo
colinardo Aug 27, 2018 updated at 14:02:35 (UTC)
Goto Top
Zitat von @2-speed:

Wie bastel ich das dann in meine vorhandene Batch ein ?
Ist doch schon fix und fertiger Batchcode face-smile. Do you need some glasses?

>>Klick<<

screenshot

  • Ein- und Ausgabepfade anpassen
  • STRG+A
  • STRG+C
  • Batch öffnen
  • STRG+V
Member: 2-speed
2-speed Aug 27, 2018 at 14:05:31 (UTC)
Goto Top
Das ich etwas mit Copy and Paste einfüge is mir schon klar.
Wenn ich den Code so in eine Batch Datei einfüge uns ausführen lasse, bekomme ich folgende Fehlermeldnung

In Zeile:1 Zeichen:98

back-to-top... exp.csv' -Delimiter ';'| %{$betrag = [decimal]::Parse($_.Verf³gbar,[c ...

back-to-top~

")" fehlt in einem Methodenaufruf.
In Zeile:1 Zeichen:98

back-to-top... sv' -Delimiter ';'| %{$betrag = [decimal]::Parse($_.Verf³gbar,[cultur ...

back-to-top~~~~~

Unerwartetes Token "³gbar" in Ausdruck oder Anweisung.
In Zeile:1 Zeichen:103

back-to-top... v' -Delimiter ';'| %{$betrag = [decimal]::Parse($_.Verf³gbar,[culture ...

back-to-top~

Argument in der Parameterliste fehlt.
In Zeile:1 Zeichen:63

back-to-top... port-Csv 'C:\JTL_Upload\Stocklist_exp.csv' -Delimiter ';'| %{$betrag ...

back-to-top~

Die schließende "}" fehlt im Anweisungsblock oder der Typdefinition.
In Zeile:1 Zeichen:139

back-to-top... mal]::Parse($_.Verf³gbar,[cultureinfo]::GetCultureInfo('de')); if ($b ...

back-to-top~

Unerwartetes Token ")" in Ausdruck oder Anweisung.
In Zeile:1 Zeichen:168

back-to-top... info]::GetCultureInfo('de')); if ($betrag -lt 0){$_.Verf³gbar = 0}els ...

back-to-top~~~~~

Unerwartetes Token "³gbar" in Ausdruck oder Anweisung.
In Zeile:1 Zeichen:207

back-to-top... ag -lt 0){$_.Verf³gbar = 0}elseif($betrag -gt 5){$_.Verf³gbar = 6};$_ ...

back-to-top~~~~~

Unerwartetes Token "³gbar" in Ausdruck oder Anweisung.
In Zeile:1 Zeichen:220

back-to-top... {$_.Verf³gbar = 0}elseif($betrag -gt 5){$_.Verf³gbar = 6};$_} | expor ...

back-to-top~

Unerwartetes Token "}" in Ausdruck oder Anweisung.
In Zeile:1 Zeichen:222

back-to-top... _.Verf³gbar = 0}elseif($betrag -gt 5){$_.Verf³gbar = 6};$_} | export- ...

back-to-top~

Ein leeres Pipeelement ist nicht zulässig.
+ CategoryInfo : ParserError: (face-smile , ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingEndParenthesisInMethodCall
Member: colinardo
colinardo Aug 27, 2018 updated at 14:15:02 (UTC)
Goto Top
Wenn ich den Code so in eine Batch Datei einfüge uns ausführen lasse, bekomme ich folgende Fehlermeldnung
Deine Batch hat nicht das richtige Encoding(siehst du ja schon an den komischen Zeichen / Exponenten), deswegen kommt es mit den Umlauten im Code nicht zurecht! Also richtig z.B. als ANSI abspeichern und noch ein chcp 1252 in deine Batch, fertig.
Member: 2-speed
2-speed Aug 27, 2018 at 14:15:28 (UTC)
Goto Top
Ich habs.
Es lag nur an den Umlauten.
Die bekomme ich beim Export raus.

Vielen Dank.


Gruß

Jean