Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Dateiinhalt an bestimmer Stelle auslesen und Mailen

Frage Entwicklung Batch & Shell

Mitglied: B-Real

B-Real (Level 1) - Jetzt verbinden

07.08.2013, aktualisiert 17:40 Uhr, 1160 Aufrufe, 9 Kommentare, 4 Danke

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
01.
01LAGERD       1308060000000000J 
02.
23LAGERD       0011485690        00001012533                         000091    
03.
24LAGERD       0011485690        XXXX Zentrallager - NEU       Straße 3, Objekt 2 
04.
25LAGERD       0011485690        P000010010Anlieferung um 19:00 Uhr 
05.
22LAGERD       0011485690        130809 850                  092239 
06.
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
01.
01LAGERD       1308050000000000J 
02.
335324684    00142090           1307500002     00000360000VL  Verlesung   20130806VTD 
03.
335324692    00142090           1307500002     00000060000VL  Verlesung   20130806VTD 
04.
335324693    00142091           1307500003     00000070000VL  Verlesung   20130806VTD 
05.
335324694    00142091           1307500003     00000070000VL  Verlesung   20130806VTD 
06.
335324695    00142091           1307500003     00000070000VL  Verlesung   20130806VTD 
07.
335325676    00142392           1304513410     00000070000RA  Rampe       20130806VTD 
08.
335325677    00142392           1304513410     00000070000RA  Rampe       20130806VTD 
09.
335326799    00132331           1308500002     00000002500VL  Verlesung   20130806VTD 
10.
335327197    00138403           1306513521     00000075000M3  SM 3. Stock 20130806VTD 
11.
335327198    00138403           1306513521     00000075000M3  SM 3. Stock 20130806VTD 
12.
335327199    00138403           1306513521     00000075000M3  SM 3. Stock 20130806VTD 
13.
335327316    00138667           1308500002     00000030000VL  Verlesung   20130806VTD 
14.
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 .
Mitglied: Endoro
07.08.2013 um 11:37 Uhr
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.
Bitte warten ..
Mitglied: colinardo
07.08.2013, aktualisiert um 11:41 Uhr
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:
01.
batchrex.exe /file:"C:\auftrag1.txt" /pattern:"33(\d{7})" >Auftragsnummern.txt
das ganze dann mit einer Schleife für die Dateien (ungetestet):
01.
@echo off & setlocal ENABLEDELAYEDEXPANSION 
02.
set output=Auftragsnummern.txt 
03.
for %%a IN (*.txt) DO @( 
04.
  batchrex.exe /file:"%%a" /pattern:"24\w+\s+(\d+)[^\n]*" >nul 
05.
  If "!errorlevel!" == "0" ( 
06.
      batchrex.exe /file:"%%a" /pattern:"24\w+\s+(\d+)[^\n]*" >>!output! 
07.
08.
  batchrex.exe /file:"%%a" /pattern:"25\w+\s+\d+\s+([^\n]*)" >nul 
09.
  If "!errorlevel!" == "0" ( 
10.
      batchrex.exe /file:"%%a" /pattern:"25\w+\s+\d+\s+([^\n]*)" >>!output! 
11.
12.
  batchrex.exe /file:"%%a" /pattern:"33(\d{7})" >nul 
13.
  If "!errorlevel!" == "0" ( 
14.
      batchrex.exe /file:"%%a" /pattern:"33(\d{7})" >>!output! 
15.
16.
)
Hoffe das hilft dir weiter
Grüße Uwe
Bitte warten ..
Mitglied: B-Real
07.08.2013 um 13:10 Uhr
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.
01 
02.
23 
03.
24 
04.
25 
05.
22 
06.
23 
07.
24 
08.
22 
09.
98
Danke
Bitte warten ..
Mitglied: B-Real
07.08.2013, aktualisiert um 16:37 Uhr
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:
01.
01LAGERD       1308050000000000J 
02.
335324684    00142090           1307500002     00000360000VL  Verlesung   20130806VTD 
03.
335324692    00142090           1307500002     00000060000VL  Verlesung   20130806VTD 
04.
98LAGERD       13080500000000000000000014

Soll es so ausgegeben werden:
01.
5324684    00142090           1307500002     00000360000VL  Verlesung   20130806VTD 
02.
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!
Bitte warten ..
Mitglied: colinardo
07.08.2013, aktualisiert um 16:37 Uhr
Dazu musst du nur den Pattern ändern:
33(\d{7}[^\n]*)
Grüße Uwe
Bitte warten ..
Mitglied: B-Real
07.08.2013 um 16:53 Uhr
Vielen Dank, das hat bestens funktioniert. Ist somit als gelöst markiert. Du hast mir sehr geholfen .
Bitte warten ..
Mitglied: B-Real
07.08.2013, aktualisiert um 17:49 Uhr
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:

01.
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!
Bitte warten ..
Mitglied: colinardo
07.08.2013 um 18:02 Uhr
23LAGERD\s+(\d+)
24LAGERD\s+(\d+)
Bitte warten ..
Mitglied: B-Real
08.08.2013 um 09:30 Uhr
Spitze, damit klappt es nun genau so wie es soll. Noch mal danke für deine Geduld! Sehr praktisches kleines Programm .

Gruß
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
Per Batch ab einer bestimmten Stelle in einer .txt auslesen (1)

Frage von PeterPann zum Thema Batch & Shell ...

Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Batch & Shell
gelöst Appx aus Image auslesen und entfernen (9)

Frage von Markus2016 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...