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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 619747
Url: https://administrator.de/contentid/619747
Ausgedruckt am: 21.11.2024 um 19:11 Uhr
14 Kommentare
Neuester Kommentar
Configfile so formatiert
Code dann: (Pfade anpassen)
Gruß w.
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.
Ist ja auch klar weil du oben das hier geschrieben hast
Regex ist oben auf deine Situation angepasst.
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 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 .
Klappt hier einwandfrei mit deinem Testschnippsel, hast du wohl die Config-Datei falsch angelegt und die Nummern nicht eingetragen . Die Datei wird ja auch in den Ausgabeordner geschrieben.
So sieht bei mir das Ergebnis nach dem Anwenden des Scripts im Ausgabeordner aus
mit folgender Config Datei
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
Na dann ....Regex oben angepasst. Vielleicht einfach mal selbst etwas mit Regex beschäftigen ...
Regular Expressions Tutorial
Regular Expressions Tutorial
würde ich auch was dafür zahlen.
Kommen wir dann auch noch in den angebotenen Genuss, oder waren das mal wieder leere Versprechungen ?
Na dann, "you have mail".👍