Top-Themen

Aktuelle Themen (A bis Z)

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, 1184 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 ..
Ähnliche Inhalte
Batch & Shell
Script Dateiinhalt auslesen und verschieben oder kopieren Batch
gelöst Frage von Slater55Batch & Shell6 Kommentare

Hallo, ich benötige Hilfe zum Thema Scripten. Ich habe folgendes Problem. Wir nutzen in unserer Firma (mit 4 Töchterfirmen) ...

Exchange Server
Exchange 2010: Mails nach extern zu einer bestimmen Domain
Frage von ViprexExchange Server2 Kommentare

Hallo zusammen, ich habe eine Frage zum Versand von E-Mails eines Devices (nicht Outlook) nach extern an E-Mail Adressen ...

Batch & Shell
In For-Schleife nach Dateiinhalt Filtern
Frage von AndroxinBatch & Shell5 Kommentare

Guten Tag, ich habe ein Shellscript, welches Dateien, die max. 30 Tage alt sind, aus einem definierten Verzeichnis ausliest, ...

Batch & Shell
Dateiinhalte vergleichen - Gemeinsamkeiten anzeigen
gelöst Frage von RotnasenkaterBatch & Shell9 Kommentare

Servus, liebe Gemeinde! Ich suche ein Programm oder ein Batchfile, welches 2 Textdateien miteinander vergleicht und dann anzeigt, welche ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 17 StundenWindows 102 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 19 StundenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 1 TagInternet3 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 1 TagDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
TK-Netze & Geräte
VPN-fähige IP-Telefone
Frage von the-buccaneerTK-Netze & Geräte16 Kommentare

Hi! Weiss noch jemand ein VPN-fähiges IP-Telefon mit dem man z.B. einen Heimarbeitsplatz gesichert anbinden könnte? Habe nur einen ...

Windows Server
GPO nur für bestimmte Computer
Frage von Leo-leWindows Server13 Kommentare

Hallo Forum, gern würde ich ein Robocopy script per Bat an eine GPO hängen. Wichtig wäre aber dort der ...

Windows Server
KMS Facts for Client configuration
Frage von winlinWindows Server13 Kommentare

Hey Leute, wir haben in unserem Netz nun einen neuen KMS Server. Haben Bestands-VMs die noch nicht aktiviert sind. ...

Windows Tools
Software-Tool zum Entfernen von bösartigem Windows
Frage von emeriksWindows Tools11 Kommentare

Hi, siehe Betreff hat das jemals irgendjemand schonmal sinnvoll eingesetzt? (MRT) E.