b-real
Goto Top

Dateiinhalt an bestimmer Stelle auslesen und Mailen

Hi Community,

ich muss mal wieder auf euer Wissen zugreifen da ich nicht so recht weiß wie ich das anstellen soll.

Die Ausgangssituation

Ich bekomme auf meinem FTP Server laufend Dateien von einem Partner mit denen wir unsere Lagersoftware füttern. Nun möchte ich die Auftragsnummer an gewisser Stelle auslesen und per E-Mail verschicken. Ebenso möchte ich die Auftragshinweise auslesen, die manchmal (aber nicht immer) bei den Aufträgen mitgesendet werden.

Mit dem E-Mail versenden habe ich keine Probleme, mit mail-as-batch habe ich schon Erfahrung. Wenn diese Infos also in eine temporäre Datei geschrieben werden wäre mir schon geholfen, diese kann ich dann per Mail verschicken. Es geht mir also nur ums Auslesen der Informationen.

Es werden unterschiedliche Satzarten per FTP geschickt, mich interessieren aber nur die Aufträge.

Der Dateiaufbau der Aufträge

An den ersten beiden Stellen jeder Zeile steht immer die Satzart. Die Dateien beginnen IMMER mit Satzart 01 und enden immer mit 98.

Auftragstyp 1
01LAGERD       1308060000000000J
23LAGERD       0011485690        00001012533                         000091   
24LAGERD       0011485690        XXXX Zentrallager - NEU       Straße 3, Objekt 2
25LAGERD       0011485690        P000010010Anlieferung um 19:00 Uhr
22LAGERD       0011485690        130809 850                  092239
98LAGERD       13080600000000000000000006

Die für mich in diesem Beispiel wichtigen Informationen sind in der Satzart 24 die Auftragsnummer 0011485690 (von Stelle 16-25) und der Auftragshinweis Anlieferung um 19:00 Uhr (von Stelle 44 bis 143). Der Auftragshinweis kann, aber muss nicht vorkommen. Falls es nicht möglich ist nur die Auftragsnummer und den Auftragshinweis zu kopieren, genügt es mir auch wenn die ganze Zeile kopiert wird.

Dann gibt es noch einen anderen Auftragstyp, wo ich auch die Auftragsnummer auslesen möchte:

Auftragstyp 2
01LAGERD       1308050000000000J
335324684    00142090           1307500002     00000360000VL  Verlesung   20130806VTD
335324692    00142090           1307500002     00000060000VL  Verlesung   20130806VTD
335324693    00142091           1307500003     00000070000VL  Verlesung   20130806VTD
335324694    00142091           1307500003     00000070000VL  Verlesung   20130806VTD
335324695    00142091           1307500003     00000070000VL  Verlesung   20130806VTD
335325676    00142392           1304513410     00000070000RA  Rampe       20130806VTD
335325677    00142392           1304513410     00000070000RA  Rampe       20130806VTD
335326799    00132331           1308500002     00000002500VL  Verlesung   20130806VTD
335327197    00138403           1306513521     00000075000M3  SM 3. Stock 20130806VTD
335327198    00138403           1306513521     00000075000M3  SM 3. Stock 20130806VTD
335327199    00138403           1306513521     00000075000M3  SM 3. Stock 20130806VTD
335327316    00138667           1308500002     00000030000VL  Verlesung   20130806VTD
98LAGERD       13080500000000000000000014

Hier gibt es immer nur Satzart 33 und es ist nur die Auftragsnummer in Stelle 3-9 wichtig (5324684, 5324692, 5324693 usw). Auftragshinweis gibt es hier keinen. Hier gibt es, im Gegensatz zum Auftragstyp 1, mehrere verschiedene Auftragsnummern die ich alle auslesen möchte.

Es werden auch Dateien geschickt, in denen keine Auftragsnummern drin stehen, diese haben dann andere Satzarten wie in den beiden Beispielen oben. Mit denen soll nichts gemacht werden, einfach überspringen.

Ich hoffe ich habe alles verständlich erklärt. Danke schonmal face-smile.

Content-Key: 213586

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

Printed on: April 19, 2024 at 05:04 o'clock

Member: Endoro
Endoro Aug 07, 2013 at 09:37:40 (UTC)
Goto Top
Hallo,
ist das eine Datei pro Autrag oder stecken die zB gemischt in einer Datei?
Falls ja- werden die Auträge noch irgendwie vonenander getrennt?
lg.
Member: colinardo
colinardo Aug 07, 2013 updated at 09:41:21 (UTC)
Goto Top
Hallo B-Real,
da sollte dir mein Tool "BatchRex" helfen.
Ein Regular-Expressions Pattern für Auftragstyp 1 wäre folgende:
24\w+\s+(\d+)[^\n]*
und für den Hinweis:
25\w+\s+\d+\s+([^\n]*)
Auftragstyp 2:
33(\d{7})
Beispiel mit BatchRex:
batchrex.exe /file:"C:\auftrag1.txt" /pattern:"33(\d{7})" >Auftragsnummern.txt  

das ganze dann mit einer Schleife für die Dateien (ungetestet):
@echo off & setlocal ENABLEDELAYEDEXPANSION
set output=Auftragsnummern.txt
for %%a IN (*.txt) DO @(
  batchrex.exe /file:"%%a" /pattern:"24\w+\s+(\d+)[^\n]*" >nul  
  If "!errorlevel!" == "0" (  
      batchrex.exe /file:"%%a" /pattern:"24\w+\s+(\d+)[^\n]*" >>!output!  
  )
  batchrex.exe /file:"%%a" /pattern:"25\w+\s+\d+\s+([^\n]*)" >nul  
  If "!errorlevel!" == "0" (  
      batchrex.exe /file:"%%a" /pattern:"25\w+\s+\d+\s+([^\n]*)" >>!output!  
  )
  batchrex.exe /file:"%%a" /pattern:"33(\d{7})" >nul  
  If "!errorlevel!" == "0" (  
      batchrex.exe /file:"%%a" /pattern:"33(\d{7})" >>!output!  
  )
)
Hoffe das hilft dir weiter face-wink
Grüße Uwe
Member: B-Real
B-Real Aug 07, 2013 at 11:10:34 (UTC)
Goto Top
Hallo colinardo, danke ich werds mir ansehen und es versuchen. Ich melde mich ob alles geklappt hat.

Endoro, es ist normalerweise eine Datei für einen Auftrag. Ausnahme ist Auftragstyp 2, wo (wie im Beispiel) immer mehrere Zeilen mit Satzart 33 kommen.

Es kann selten auch vorkommen, dass 2 Aufträge von Auftragstyp 1 hintereinander vorkommen.

Das würde dann so aussehen:

01
23
24
25
22
23
24
22
98

Danke
Member: B-Real
B-Real Aug 07, 2013 updated at 14:37:14 (UTC)
Goto Top
Hallo colinardo,

vielen Dank für deinen Vorschlag, ich habe es getestet und es hat bestens funktioniert.

Eine Frage habe ich dann doch noch, welche Parameter muss ich mitgeben dass bei Auftragstyp 2 alles ausgegeben wird (bis auf die "33" zu Begin)?

Also wenn es so vorkommt:
01LAGERD       1308050000000000J
335324684    00142090           1307500002     00000360000VL  Verlesung   20130806VTD
335324692    00142090           1307500002     00000060000VL  Verlesung   20130806VTD
98LAGERD       13080500000000000000000014


Soll es so ausgegeben werden:
5324684    00142090           1307500002     00000360000VL  Verlesung   20130806VTD
5324692    00142090           1307500002     00000060000VL  Verlesung   20130806VTD

Wobei mir hier eigentlich nur "5324684" und "VL Verlesung" wichtig ist, aber wenn ich mehrere Zeilen mit 33 habe werden zuerst alle Auftragsnummern ausgegeben und dann der Text "VL Verlesung". Dann fehlt mir der Zusammenhang zur Auftragsnummer, daher wäre es auch OK wenn die ganze Zeile ausgegeben wird.

Danke!
Member: colinardo
colinardo Aug 07, 2013 updated at 14:37:45 (UTC)
Goto Top
Dazu musst du nur den Pattern ändern:
33(\d{7}[^\n]*)

Grüße Uwe
Member: B-Real
B-Real Aug 07, 2013 at 14:53:30 (UTC)
Goto Top
Vielen Dank, das hat bestens funktioniert. Ist somit als gelöst markiert. Du hast mir sehr geholfen face-smile.
Member: B-Real
B-Real Aug 07, 2013 updated at 15:49:16 (UTC)
Goto Top
Hallo Uwe,

jetzt muss ich doch noch mal nachfragen. Und zwar kommt bei den Zeilen die mit "23" beginnen auch eine Artikelnummer vor. In dieser Artikelnummer kann auch eine "24" enthalten sein, in diesem Fall wird mir auch der Text danach ausgegeben. Den brauche ich jedoch nicht.

Zum Beispiel:

23LAGERD       0011485390        00001012417                         000019  

Hier kommt die Artikelnummer in "00001012417" mit einer "24" vor. Dadurch wird in meinem Outputfile auch die "000019" danach angezeigt.

Kann man das Pattern ändern, dass die "23" fix an "LAGERD" gekoppelt ist? Das ist nämlich immer gleich und ändert sich nicht. Ebenso "24LAGERD"

Danke!
Member: colinardo
colinardo Aug 07, 2013 at 16:02:27 (UTC)
Goto Top
23LAGERD\s+(\d+)
24LAGERD\s+(\d+)
Member: B-Real
B-Real Aug 08, 2013 at 07:30:00 (UTC)
Goto Top
Spitze, damit klappt es nun genau so wie es soll. Noch mal danke für deine Geduld! Sehr praktisches kleines Programm face-smile.

Gruß