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

EAN-Nummern aus INVRPT auslesen und in einer Excel-Datei speichern

Frage Entwicklung

Mitglied: ozean

ozean (Level 1) - Jetzt verbinden

14.02.2013 um 10:22 Uhr, 1537 Aufrufe, 6 Kommentare

Hallo zusammen,

ich habe eine gemischte EDI-Datei, in welcher Sales-Reports (SLSRPT) und Inventur-Reports (INVRPT) aufgeführt sind.

Ich muss aus dieser Datei (im ersten Schritt) alle EANs (eigentlich eine Nummer, welche immer mit 4 beginnt und 13 Stellen hat) auslesen und in einer separaten Datei (z.B. Excel) abspeichern, aber eigentlich aus den Textblöcken, welche zu INVRPT gehören.
Ich kann natürlich alle Text-Blöcke manuell entfernen, welche zu SLSRPT gehören.

Gibt es irgendeine Anwendung oder Script, welche(s) mir bei der Lösung des Problems helfen kann?

Als Programmierer bin leider ein absoluter Laie, das ich mir ein Script schreiben kann.

Vielen Dank!
Mitglied: rubberman
16.02.2013 um 13:10 Uhr
Hallo ozean.

Als Programmierer bin leider ein absoluter Laie ...

Hmm, ich bin als EDI-Dateien-Interpretierer absoluter Laie.
Also musst du jemanden finden der sich sowohl mit Programmieren auskennt, als auch detailliert weiß wie deine EDI Dateien aufgebaut sind. Andere Möglichkeit wäre ja vielleicht, wenn du so eine Datei mal beispielhaft hier ... naja egal.

Grüße
rubberman
Bitte warten ..
Mitglied: ozean
17.02.2013, aktualisiert um 21:41 Uhr
Hallo rubberman,

eigentlich ist die Interpretation einer EDI-Datei eine Nebensache. Vielmehr geht es darum, aus einer Textdatei eine Variable auszulesen, welche mit 4 beginnt und 13 Stellen hat. Hier ist ein Auszug aus dieser Datei:

UNB+UNOC:3+4399902140089:14+4009796000009:14+130201:0948+47431844'
UNH+1+INVRPT:D:96A:UN:EAN004'
BGM+35+1660+9'
DTM+137:20110425:102'
DTM+366:20110425:102'
DTM+194:20110425:102'
DTM+206:20110425:102'
NAD+BY+4399902140089::9'
NAD+SU+4009796000009::9'
NAD+SN+4399902140089::9'
LIN+1++4009796076059:EN'
QTY+145:1'
LIN+2++4009796076066:EN'
QTY+145:1'
LIN+3++4009796076073:EN'
QTY+145:1'
LIN+4++4009796076172:EN'
QTY+145:1'
UNT+102+1'
UNZ+1+47431844'
UNA:+.? '

Auffällig ist, dass diese Nummern immer nach dem "+" beginnen und vor dem ":" enden.
Die Frage ist, was wenn nach dem Plus-Zeichen eine 4 steiht, aber keine 13 Stellen hat und keine EAN ist?

Wie dem auch sei... Tatsache ist, ich habe eine Textdatei mit oben genanntem Inhalt. Als Ergebnis sollte eine neue Textdatei sein, in welcher nur die EAN's stehen:

4399902140089
4009796000009
4399902140089
4009796000009
4399902140089
4009796076059
4009796076066
4009796076073
4009796076172

Über die doppelte Einträge muss man sich keine Gedanken machen, die könnte man im Excel schnell aussortieren.

Wie kann man so was realisieren?

Gruß
Ozean
Bitte warten ..
Mitglied: rubberman
17.02.2013, aktualisiert um 22:41 Uhr
Hallo ozean.

So etwas realisiert man üblicherweise mit Regulären Ausdrücken.
Angenommen deine Ausgangsdatei heißt "test.txt", geschrieben werden soll in "neu.txt" - Folgendes VBScript sollte es tun:

*.vbs
01.
Option Explicit 
02.
 
03.
Const sInFile = "test.txt" 
04.
Const sOutFile = "neu.txt" 
05.
 
06.
Dim oRegex, oFSO, oFile, colMatches, oMatch, sContent 
07.
 
08.
Set oRegex = New RegExp 
09.
oRegex.Global = True 
10.
oRegex.Pattern = "\+4\d{12}:" 
11.
 
12.
Set oFSO = CreateObject("Scripting.FileSystemObject") 
13.
sContent = oFSO.OpenTextFile(sInFile).ReadAll 
14.
Set oFile = oFSO.OpenTextFile(sOutFile, 2, True) 
15.
If oRegex.Test(sContent) Then 
16.
  Set colMatches = oRegex.Execute(sContent) 
17.
  For Each oMatch In colMatches 
18.
    oFile.WriteLine Mid(oMatch.Value, 2, 13) 
19.
  Next 
20.
End If 
21.
oFile.Close 
22.
 
23.
Set oFile = Nothing 
24.
Set oMatch = Nothing 
25.
Set colMatches = Nothing 
26.
Set oFSO = Nothing 
27.
Set oRegex = Nothing
Grüße
rubberman
Bitte warten ..
Mitglied: ozean
18.02.2013 um 10:07 Uhr
Hallo rubberman,

du bist echt super! Mein Respekt!
Funktioniert wunderbar.

Ich hätte so was selbst gar nicht geschafft.

dürfte ich dich noch was fragen?

ich habe mir überlegt, ob es evtl. besser wäre, die doppelten einträge gleich in den Script zu integrieren.
Dazu habe ich einen Ausschnitt hier im Forum gefunden, welcher genau das machen soll:

Ein = "D:\Datei.txt"
Aus = "D:\Unikate.txt"

Set fso = CreateObject("Scripting.FileSystemObject")
Set d = CreateObject("Scripting.Dictionary")

ZeilenEin = Split(fso.OpenTextFile(Ein).ReadAll, vbCrLf)
For Each Zeile In ZeilenEin
If Not d.Exists(Zeile) Then d.Add Zeile, Dummy
Next

fso.CreateTextFile(Aus).Write Join(d.Keys, vbCrLf)
Ich habe das am Ende deines Scripts eingefügt und die Dateinamen angepasst, wobei als "Ein" die neuerstellte neu.txt und als "Aus" die EAN.txt eingegeben habe.

Das heißt, die neu.txt wäre als temporäre Datei.
Aber das hat nicht funktioniert. Wahrscheinlich müsste ich noch irgendwelche Variablen definieren.

die temporäre Datei soll am Ende auch gelöscht werden.

Köntest du mir sagen, wie ich diesen Ausschnitt in dein Script integriere und die temporäre Datei lösche?

Danke!
Bitte warten ..
Mitglied: rubberman
18.02.2013, aktualisiert um 17:42 Uhr
Hallo ozean.

Eine temporäre Datei ist nicht nötig. Das geht genauso on the fly.
01.
Option Explicit 
02.
 
03.
Const sInFile = "test.txt" 
04.
Const sOutFile = "EAN.txt" 
05.
 
06.
Dim oRegex, oFSO, oDict, oFile, colMatches, oMatch, sContent, sEan 
07.
 
08.
Set oRegex = New RegExp 
09.
oRegex.Global = True 
10.
oRegex.Pattern = "\+4\d{12}:" 
11.
 
12.
Set oFSO = CreateObject("Scripting.FileSystemObject") 
13.
sContent = oFSO.OpenTextFile(sInFile).ReadAll 
14.
Set oDict = CreateObject("Scripting.Dictionary") 
15.
If oRegex.Test(sContent) Then 
16.
  Set colMatches = oRegex.Execute(sContent) 
17.
  For Each oMatch In colMatches 
18.
    sEan = Mid(oMatch.Value, 2, 13) 
19.
    If Not oDict.Exists(sEan) Then oDict.Add sEan, vbNullString 
20.
  Next 
21.
End If 
22.
Set oFile = oFSO.OpenTextFile(sOutFile, 2, True) 
23.
oFile.Write Join(oDict.Keys, vbCrLf) 
24.
oFile.Close 
25.
 
26.
Set oFile = Nothing 
27.
Set oDict = Nothing 
28.
Set oMatch = Nothing 
29.
Set colMatches = Nothing 
30.
Set oFSO = Nothing 
31.
Set oRegex = Nothing
Falls nötig, darf sInFile = sOutFile sein

Grüße
rubberman
Bitte warten ..
Mitglied: ozean
19.02.2013 um 12:13 Uhr
Hallo rubberman,

ich danke dir ganz herzlich! Du hast mir sehr geholfen.
Das Script funktioniert 1A!!!
Bitte warten ..
Neuester Wissensbeitrag
DSL, VDSL

Telekom blockiert immer noch den Port 7547 in ihrem Netz

(3)

Erfahrungsbericht von joachim57 zum Thema DSL, VDSL ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...