springstil
Goto Top

CMD: Wenn Nummer - in Datei Zeile ändern

Hallo Zusammen,

ich habe ein riesen Problem in der Firma und brauch da dringend mal hilfe...

Folgendes Szenario:

Wir machen mit einem Großen Kunden EDI. Dieser Kunde hat aber bei uns sogenannte Block / Rahmenaufträge bzw. Nummer.
Das bedeutet das es einen Auftrag gibt mit bestimmten Artikeln und Mengen.

Nun haben wir eine neue Warenwirtschaft und das EDI Läuft etwas anders bei uns was rahmen Aufträge angeht. Der Kunde muss uns zwingend in einem Feld die Rahmennummer mitteilen.
Jetzt bin ich seid einer Woche hinterher, das der Kunde dies mit übergeben kann. Jetzt ist Freitag, und am Montag kommen die Aufträge und es gibt noch keine Lösung. Daher brauche ich dringend einen Notfallplan dafür.

Mein Plan ist recht simpel aber für mich (mit meinem Skript Kenntnissen) fast nicht umzusetzen.

Mein Plan:

Was muss gemacht werden:

Es gibt in der EDI Datei eine Zeile die mit 5002 beginnt. (500 ist der Satz vom Auftragskopf, und die 2 Bedeutet nur Bestellung. Ist aber immer eindeutig) Wenn das in drin steht, muss in der Zeile nach einer Nummer gesucht werden. Dort steht dann z.b die GLN 4260328920008 drin. Wenn diese Nummer in der Zeile drin steht, muss an Position 56-70 in dieser Zeile etwas eingetragen werden.

die 5002 kommt in der Datei öfters vor... Schön wäre es dann, wenn ich eine Config Datei dabei führen würde. Wo dann z.b die GLN steht und danach die Rahmenauftragsnummer.

Es müsste also bei der Zeile 5002 geschaut werden, welche GLN steht dort drin, müsste dann mit der Config abgeglichen werden und die dazugehörige Rahmenauftragsnummer in Position 56-70 reingeschrieben werden.

Wichtig dabei ist aber das die Positionen NICHT verändert werden. Sprich in wenn die Rahmenauftragsnummer 12345 wäre, müssten dann die Leerzeichen von Position 56-61 durch die zahlen ersetzt werden.

Wenn mir hier jemand helfen kann das bis Montag zu realisieren, würde ich auch was dafür zahlen. Es ist wirklich sehr wichtig. Wenn möglich in Powershell

Content-ID: 619747

Url: https://administrator.de/forum/cmd-wenn-nummer-in-datei-zeile-aendern-619747.html

Ausgedruckt am: 22.12.2024 um 11:12 Uhr

NordicMike
NordicMike 06.11.2020 um 11:14:45 Uhr
Goto Top
Liegen die Dateien auf einem Windows Server oder Linux Server? Soll das Script manuell gestartet werden, per Cronjob oder aus der Software heraus?

Sobald diese Fragen geklärt sind, könnte man die richtige Sprache dafür auswählen.

Oder soll es tatsächlich die Windows Batch sein?
Springstil
Springstil 06.11.2020 um 11:34:52 Uhr
Goto Top
Ich hab powershell nicht gefunden :x

Läuft auf einem Windows Server und würde das dann als Job mit einrichten. Denn er kopiert die EDI dateien auch alle 15 min in 2 verschiedene Ordner (einmal zum einlesen und einmal zum sichern) Und ich würde das Script gern zwichen den Ordnern einbauen, so das ich die Originale immer habe.
146189
Lösung 146189 06.11.2020 aktualisiert um 14:59:48 Uhr
Goto Top
Configfile so formatiert
4260328920008 = 222222
4260328920009 = 3333333
4260328920010 = 44444444
....
..
.

Code dann: (Pfade anpassen)
$configfile = "D:\config.txt"  
$quelle = "D:\quelle"  
$ziel = 'D:\ziel'  
# ---------------
$config = gc $configfile -raw | ConvertFrom-StringData

ls $quelle -File -PipelineVariable file | %{
    [regex]::Replace((gc $_.FullName -raw),'(?ism)^5002[^\s]*\s*\d+\s*\d+\s*(\d+)[^\r\n]*'',{  
        param($m)
        if ($config.ContainsKey($m.Groups[1].Value)){
            $rahmenNr = $config.($m.Groups[1].Value)
            $m.Value -replace "(?<=^.{55}).{$($rahmenNr.length)}",$rahmenNr  
        }else{$m.Value}
    }) | sc "$ziel\$($file.Name)"  
}

Gruß w.
Springstil
Springstil 06.11.2020 um 13:01:09 Uhr
Goto Top
Danke für die schnelle Hilfe.

Leider klappt das skript nicht. Es läuft zwar durch, aber schreibt die Daten nicht rein.

So sieht die Datei beispielsweise aus:
screenshot_2

Nach dem bearbeiten soll sie dann z.b so aussehen:
screenshot_3

Bilder sagen mehr als Tausend worte :D
146189
146189 06.11.2020 aktualisiert um 13:55:57 Uhr
Goto Top
Ist ja auch klar weil du oben das hier geschrieben hast
GLN 4260328920008
Deswegen habe vorrausgesetzt das der String "GLN" vor der Nummer steht und dieser String steht ja oben im Regex und wenn er nicht matched dann wird auch nichts ersetzt face-wink

Regex ist oben auf deine Situation angepasst.

Bilder sagen mehr als Tausend worte :D
Copy n Paste in nen Code-Block wäre noch besser face-wink.
Springstil
Springstil 06.11.2020 um 14:02:17 Uhr
Goto Top
Mh schreibt er leider immer noch nicht rein. Eine idee woran das noch liegen könnte?


Zitat von @146189:
Copy n Paste in nen Code-Block wäre noch besser face-wink.

Kein Problem :D
5002200IBME                    2020090820201016                                      4003529000007             4260328920008                                                                                                                                       90070190159899007019005928             MOEMAX  SCHWAEBISCH GMUEND                                            MUEHLWEG 5                         SCHWAEBISCH GMUEND                 73525    DE                                                                                                                                                               
505AAI4297/TEST/ZUL                                                                                                                                                                                                                                                                                                                   
510     14003529560822 004297009801   102007-48      KUNSTBLUME                                                                    36                                                                                                                                                                                                 
500220029N1                    2020090820201009                                      4003529000007             4260328920009                                                                                                                                       90070190158739009852029321             XXXLUTZ PRAHA II                                                      CHLUMECKA 712/8                    PRAHA 14                           198 00   CZ                                                                                                                                                               
505AAI4297/ZUL/TEST/EDI                                                                                                                                                                                                                                                                                                               
510     14003529982051 004297018602   1916103MM-50   KUNSTSTOFF                                                                     6                                                                                                                                                                                                 
500220005AM                    2020090820201023                                      4003529000007             4260328920010                                                                                                                                       90070190158979009852029338             MOEBELIX TRENCIN                                                      OC LAUGARICIO 7271 BELA            TRENCIN                            911 01   SK                                                                                                                                                               
505AAI4297/ZUL/TEST/EDI                                                                                                                                                                                                                                                                                                               
510     14003529756850 004297031501   104092-00      KUNSTPFLANZE, H: CA: 40 CM                                                    48                                                                                                                                                                                                 
146189
146189 06.11.2020 aktualisiert um 14:10:06 Uhr
Goto Top
Klappt hier einwandfrei mit deinem Testschnippsel, hast du wohl die Config-Datei falsch angelegt und die Nummern nicht eingetragen face-wink. Die Datei wird ja auch in den Ausgabeordner geschrieben.

So sieht bei mir das Ergebnis nach dem Anwenden des Scripts im Ausgabeordner aus
5002200IBME                    2020090820201016        333333                        4003529000007             4260328920008                                                                                                                                       90070190159899007019005928             MOEMAX  SCHWAEBISCH GMUEND                                            MUEHLWEG 5                         SCHWAEBISCH GMUEND                 73525    DE                                                                                                                                                               
505AAI4297/TEST/ZUL                                                                                                                                                                                                                                                                                                                   
510     14003529560822 004297009801   102007-48      KUNSTBLUME                                                                    36                                                                                                                                                                                                 
500220029N1                    2020090820201009        666666                        4003529000007             4260328920009                                                                                                                                       90070190158739009852029321             XXXLUTZ PRAHA II                                                      CHLUMECKA 712/8                    PRAHA 14                           198 00   CZ                                                                                                                                                               
505AAI4297/ZUL/TEST/EDI                                                                                                                                                                                                                                                                                                               
510     14003529982051 004297018602   1916103MM-50   KUNSTSTOFF                                                                     6                                                                                                                                                                                                 
500220005AM                    2020090820201023        555555                        4003529000007             4260328920010                                                                                                                                       90070190158979009852029338             MOEBELIX TRENCIN                                                      OC LAUGARICIO 7271 BELA            TRENCIN                            911 01   SK                                                                                                                                                               
505AAI4297/ZUL/TEST/EDI                                                                                                                                                                                                                                                                                                               
510     14003529756850 004297031501   104092-00      KUNSTPFLANZE, H: CA: 40 CM                                                    48                                                                                                   

mit folgender Config Datei
2020090820201016 = 333333
2020090820201009 = 666666
2020090820201023 = 555555
NordicMike
NordicMike 06.11.2020 um 14:08:46 Uhr
Goto Top
Warum wartest du auf eine Lösung? Schau doch nach was jede Zeile macht und dann kannst du es dir selbst erklären warum es nicht geht.
Springstil
Springstil 06.11.2020 um 14:56:07 Uhr
Goto Top
Zitat von @146189:

Klappt hier einwandfrei mit deinem Testschnippsel, hast du wohl die Config-Datei falsch angelegt und die Nummern nicht eingetragen face-wink. Die Datei wird ja auch in den Ausgabeordner geschrieben.

So sieht bei mir das Ergebnis nach dem Anwenden des Scripts im Ausgabeordner aus
> 5002200IBME                    2020090820201016        333333                        4003529000007             4260328920008                                                                                                                                       90070190159899007019005928             MOEMAX  SCHWAEBISCH GMUEND                                            MUEHLWEG 5                         SCHWAEBISCH GMUEND                 73525    DE                                                                                                                                                               
> 505AAI4297/TEST/ZUL                                                                                                                                                                                                                                                                                                                   
> 510     14003529560822 004297009801   102007-48      KUNSTBLUME                                                                    36                                                                                                                                                                                                 
> 500220029N1                    2020090820201009        666666                        4003529000007             4260328920009                                                                                                                                       90070190158739009852029321             XXXLUTZ PRAHA II                                                      CHLUMECKA 712/8                    PRAHA 14                           198 00   CZ                                                                                                                                                               
> 505AAI4297/ZUL/TEST/EDI                                                                                                                                                                                                                                                                                                               
> 510     14003529982051 004297018602   1916103MM-50   KUNSTSTOFF                                                                     6                                                                                                                                                                                                 
> 500220005AM                    2020090820201023        555555                        4003529000007             4260328920010                                                                                                                                       90070190158979009852029338             MOEBELIX TRENCIN                                                      OC LAUGARICIO 7271 BELA            TRENCIN                            911 01   SK                                                                                                                                                               
> 505AAI4297/ZUL/TEST/EDI                                                                                                                                                                                                                                                                                                               
> 510     14003529756850 004297031501   104092-00      KUNSTPFLANZE, H: CA: 40 CM                                                    48                                                                                                   
> 
> 

mit folgender Config Datei
> 2020090820201016 = 333333
> 2020090820201009 = 666666
> 2020090820201023 = 555555
> 

So passt das. ABER " 2020090820201016" ist die Zeitangabe. Die ist Variabel. Die GLN um die es geht kommt weiter hinten
screenshot_4

Du suchst nach dem Gelb Markierten. Aber er soll eigendlich nach dem Grün Markierten schauen der sich in der Zeile befindet. Wenn das weiterhilft die gesuchte Nummer befindet sich immer an Position 112-124 (13 Zeichen)

Wenn die Nummer davor steht, klappt es aber wenn die danach steht leider nicht.
146189
Lösung 146189 06.11.2020 aktualisiert um 15:03:46 Uhr
Goto Top
Na dann ....Regex oben angepasst. Vielleicht einfach mal selbst etwas mit Regex beschäftigen ... face-wink
Regular Expressions Tutorial
Springstil
Springstil 06.11.2020 um 15:04:32 Uhr
Goto Top
Genial!! Vielen vielen dank für die Hilfe. Dann kann ich am Wochenende wenigstens schlafen face-smile Das hat super geklappt!
146189
146189 06.11.2020 aktualisiert um 15:28:39 Uhr
Goto Top
würde ich auch was dafür zahlen.
Kommen wir dann auch noch in den angebotenen Genuss, oder waren das mal wieder leere Versprechungen ? face-smile
Springstil
Springstil 06.11.2020 um 19:43:59 Uhr
Goto Top
Natürlich nicht :D Wollte dir ne PN schreiben, aber muss mich erst verbinden mit dir :P
146189
146189 06.11.2020 aktualisiert um 22:29:53 Uhr
Goto Top
Na dann, "you have mail".👍