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

Ausgelesene Daten automatisch aufbereiten um in anderer DB (Programm) einzulesen.

Frage Entwicklung Datenbanken

Mitglied: Mit.ohne.Ahnung

Mit.ohne.Ahnung (Level 1) - Jetzt verbinden

15.05.2013, aktualisiert 18:33 Uhr, 1813 Aufrufe, 13 Kommentare

Ein freundliches Hallo erstmal,

mein Name ist Frank und ich stehe vor einem (für mich ) unlösbaren Problem.

Die Aufgabenstellung ist aus Programm A ausgelesene Daten (vorgegebene Exportfunktion des Programms) in ein anderes Programm B einlesen.
Dazu müssen die Daten für Programm B aufbereitet werden (leider auch vorgegeben).
So weit so gut.... ich bekomme das auch hin mit viel gefummel. Das Problem ist das dies unsere Vertriebler machen sollen. Da dies ganze so komplex ist, denke ich das trotz Anleitung zu Fehlern führen wird.
Daher suche ich eine Möglichkeit das ganze zum teil zu Automatisieren. Zumindest die Aufbereitung der Daten, alles andere ist ohne Probleme mit Anleitung erklärt.
Die Aufbereitung der Daten ist aber so Komplex das ich nicht mal weiß wo ich ansatzweise anfangen soll.... auch weil scripten nicht unbedingt mein Ding ist.
Hier mal die dat Datei wie ich Sie aus Programm A erhalte:
01.
PraxMini-Absender^PraxFensterzeile1^PraxFensterzeile2^PraxStrasse^PraxPlz^PraxOrt^PatNr^Anrede^Titel^Vorname^Namenszusatz^Nachname^Strasse^Plz^Ort^LBehandlung^LRecall^Telefon^EMail 
02.
Z1 - Maria Trost 25 - 56070 Koblenz^^Z1^Maria Trost 25^56070^Koblenz^         1^Herrn^^Hans^^Glückskind^Maria Trost 25^56070^Koblenz^^^0261-80700-0^ 
03.
Z1 - Maria Trost 25 - 56070 Koblenz^^Z1^Maria Trost 25^56070^Koblenz^         2^Kind^^Felix^^Musterkind^Münsterlandstr. 4^99999^Musterstadt^31.08.2006^^0261/80700-0^compudent@compugroup.com 
04.
Z1 - Maria Trost 25 - 56070 Koblenz^^Z1^Maria Trost 25^56070^Koblenz^         3^Frau^^Frieda^^Blox^Markus-Schleicher-Str. 12^07552^Gera^16.12.2004^^^ 
05.
Z1 - Maria Trost 25 - 56070 Koblenz^^Z1^Maria Trost 25^56070^Koblenz^         4^Herrn^Prof.^Kurt^^Tannert^Dahlienweg 12^08527^Plauen^01.10.2004^^0261/80^ 
06.
Z1 - Maria Trost 25 - 56070 Koblenz^^Z1^Maria Trost 25^56070^Koblenz^         5^Kind^^Hänschen^^Planung^Maria Trost 25^56070^Koblenz^23.03.1999^^0261/80^
und so bräuchte ich Sie als txt:
01.
1;x	;Hans	;	Glückskind	;Maria Trost 25		;56070	;Koblenz	;0261-80700-0	# 
02.
2;x	;Felix	;	Musterkind	;Münsterlandstr. 4	;99999	;Musterstadt	;0261/80700-0	# 
03.
3;x	;Frieda	;	Blox		;Schleicher-Str. 12	;7552	;Gera		;x		# 
04.
4;Prof.	;Kurt	;	Tannert		;Dahlienweg 12		;8527	;Plauen		;0261/80	# 
05.
5;x	;Hänschen;	Planung		;Maria Trost 25		;56070	;Koblenz	;0261/80	#
Semikolon als Trennzeichen und Raute als Datensatzende... die X stehen als Platzhalter da keine Leeren Felder sein dürfen!
Hoffe ich konnte mich deutlich ausdrücken ... ist das ganze so möglich das die Vertriebler nur in Ordner IN auf Desktop schieben und dann ausgabe in Ordner OUT und das ganze per batch oder script gewandelt wird?

Danke schon mal im voraus für eure Gedankengänge

Grüße Frank

[Edit Biber] Codeformatierung nachgezogen.
P.S. Sollten wir es nich in Richtung "Bätchkrams" schieben? [/Edit]
Mitglied: bastla
15.05.2013 um 18:25 Uhr
Hallo Mit.ohne.Ahnung und willkommen im Forum!

Bitte ergänze die Darstellung der Datensätze (insbes der Ausgangsdaten) durch "Code"-Formatierung (mit <code> und </code>) ...

Grüße
bastla
Bitte warten ..
Mitglied: Mit.ohne.Ahnung
15.05.2013 um 20:44 Uhr
Hallo bastla,

wow, danke für die schnelle Antwort. Versteh leider nicht wie du das meinst?
Ich habe das genau so aus der dat Datei herauskopiert. Die Trennzeichen von Software A sind wohl "^"

Gruß Frank
Bitte warten ..
Mitglied: bastla
15.05.2013, aktualisiert um 20:54 Uhr
Hallo Mit.ohne.Ahnung!
Versteh leider nicht wie du das meinst?
Biber hat die Formatierung nachgeholt (wenn Du den Beitrag editierst, kannst Du Dir auch ansehen, wie) - jetzt lässt sich auch erkennen, dass zB nach dem ersten "Koblenz" 2 Trennzeichen folgen ...

Brauchst Du tatsächlich im Ergebnis nicht nur das Semikolon als Trennzeichen, sondern davor auch noch TAB?

Grüße
bastla
Bitte warten ..
Mitglied: Mit.ohne.Ahnung
15.05.2013 um 21:05 Uhr
Hallo Bastla,

nur das Semikolon als Trennzeichen und Raute als Datensatzende. Leere Felder habe ich einfach mit x belegt da ich keine leeren Felder haben darf.

In der Ausgangsdatei stellen sich leere Felder so dar ^text^^text

Grüße Frank
Bitte warten ..
Mitglied: bastla
15.05.2013 um 21:40 Uhr
Hallo Mit.ohne.Ahnung!

Als VBScript zum Testen für eine Datei:
01.
Ein = "D:\Ein.txt" 
02.
Aus = "D:\Aus.txt" 
03.
DelimAlt = "^" 
04.
DelimNeu = ";" 
05.
Zeilenende = "#" 
06.
FeldNummern = Array(6,8,9,11,12,13,14,17) 'benötigte Felder, Zählung beginnt bei 0 
07.
 
08.
Set fso = CreateObject("Scripting.FileSystemObject") 
09.
'gesamten Dateiinhalt einlesen, leere Felder durch "x" ersetzen und in Zeilen aufteilen 
10.
Zeilen = Split(Replace(fso.OpenTextFile(Ein).ReadAll, DelimAlt & DelimAlt, DelimAlt & "x" & DelimAlt), vbNewLine) 
11.
 
12.
For i = 1 To UBound(Zeilen) 'Kopfzeile überspringen 
13.
    If Trim(Zeilen(i)) <> "" Then 'Leerzeilen nicht verarbeiten 
14.
        Felder = Split(Zeilen(i), DelimAlt) 'Zeile in Felder aufspalten 
15.
        A = A & vbNewLine & Trim(Felder(FeldNummern(0))) 'Zeilenschaltung und erstes Feld ohne Delimiter eintragen 
16.
        For j = 1 To UBound(FeldNummern) 'übrige Feldnummern durchgehen 
17.
            A = A & DelimNeu & Felder(FeldNummern(j)) 'weitere Felder mit vorangestelltem Delimiter hinzufügen 
18.
        Next 
19.
        A = A & Zeilenende 'Zeilenendekennung anfügen 
20.
    End If 
21.
Next 
22.
fso.CreateTextFile(Aus).Write Mid(A, 3)'Inhalt schreiben, führende Zeilenschaltung in Zeile 1 überspringen
Grüße
bastla
Bitte warten ..
Mitglied: Mit.ohne.Ahnung
15.05.2013 um 22:13 Uhr
Hallo bastla,

RESPEKT !!!!

verfolge ja öfters deine post´s ..... und war schon öfters überrascht !

Hut ab ! ! !

vielen dank !

werde jetzt noch paar Testdaten anlegen und noch mal testen, dann schließe ich als gelöst. Denke aber das ist die Lösung

herzlichen Dank und dir noch einen schönen Abend.

Liebe grüße

Frank
Bitte warten ..
Mitglied: Mit.ohne.Ahnung
15.05.2013 um 22:19 Uhr
hallo bastla,

eine kleinigkeit noch.

wie kann ich in dem script die datei vorher noch umbenennen..... so heist die datei "z1_patsel.dat"
das sie in z1_patsel.txt umbenannt wird ... also nur .txt ... oder läuft das script auch wenn die endung dat heist?

gruß Frank
Bitte warten ..
Mitglied: bastla
15.05.2013 um 22:30 Uhr
Hallo Mit.ohne.Ahnung!

Sinnvoll wäre es vermutlich, die ".dat"-Datei als Parameter zu übergeben (auch per Drag & Drop auf die Scriptdatei) und die neue Datei als ".txt" zu speichern - etwa so:
01.
DelimAlt = "^" 
02.
DelimNeu = ";" 
03.
Zeilenende = "#" 
04.
FeldNummern = Array(6,8,9,11,12,13,14,17) 'benötigte Felder, Zählung beginnt bei 0 
05.
 
06.
If WScript.Arguments.Count < 1 Then 'kein Parameter übergeben 
07.
    WScript.Echo "DAT-Datei als Parameter übergeben!" 
08.
    WScript.Quit 1 
09.
End If 
10.
 
11.
Set fso = CreateObject("Scripting.FileSystemObject") 
12.
Ein = WScript.Arguments(0) 
13.
 
14.
If LCase(Right(Ein, 4) <> ".dat" Then 'Eingabedatei nicht vom Typ ".dat" 
15.
    WScript.Echo "DAT-Datei als Parameter übergeben!" 
16.
    WScript.Quit 2 
17.
End If 
18.
 
19.
Aus = Left(Ein, Len(Ein) - 3) & "txt" 'Ausgabedatei auf ".txt" umbenennen 
20.
 
21.
'gesamten Dateiinhalt einlesen, leere Felder durch "x" ersetzen und in Zeilen aufteilen 
22.
Zeilen = Split(Replace(fso.OpenTextFile(Ein).ReadAll, DelimAlt & DelimAlt, DelimAlt & "x" & DelimAlt), vbNewLine) 
23.
 
24.
For i = 1 To UBound(Zeilen) 'Kopfzeile überspringen 
25.
    If Trim(Zeilen(i)) <> "" Then 'Leerzeilen nicht verarbeiten 
26.
        Felder = Split(Zeilen(i), DelimAlt) 'Zeile in Felder aufspalten 
27.
        A = A & vbNewLine & Trim(Felder(FeldNummern(0))) 'Zeilenschaltung und erstes Feld ohne Delimiter eintragen 
28.
        For j = 1 To UBound(FeldNummern) 'übrige Feldnummern durchgehen 
29.
            A = A & DelimNeu & Felder(FeldNummern(j)) 'weitere Felder mit vorangestelltem Delimiter hinzufügen 
30.
        Next 
31.
        A = A & Zeilenende 'Zeilenendekennung anfügen 
32.
    End If 
33.
Next 
34.
fso.CreateTextFile(Aus).Write Mid(A, 3)'Inhalt schreiben, führende Zeilenschaltung in Zeile 1 überspringen
Grüße
bastla
Bitte warten ..
Mitglied: Mit.ohne.Ahnung
15.05.2013 um 23:21 Uhr
Hallo bastla,

nochmals vielen Dank für deine Bemühungen !!!

Konnte das Problem ganz einfach lösen (kleine Erfolge tun mir auch gut

Da die datei das Programm A ausgibt immer gleich heist habe ich dein script einfach so angepasst

Ein = "C:\input\z1_patsel.dat"
Aus = "C:\output\Charly_Import.txt"

funktioniert Prima

Danke

Gruß Frank
Bitte warten ..
Mitglied: Mit.ohne.Ahnung
17.05.2013 um 12:32 Uhr
Hallo bastla,

einen kleinen bug habe ich jetzt doch noch entdeckt, wo ich nicht weiter komme. Wie ich dein script verstehe liest du ja die Felder aus, die bearbeitet werden müssen, und wo nichts steht wird ein x eingesetzt. In der Ausgabe Datei ist mir aufgefallen, das bei "Straße" kein x gesetzt wird.

Eingabedatei Beispiel: (Namen und Tel. geändert wegen Datenschutz)
7569^FrauAngelikaHeblabla^
Dr. F. Name & Dr. K. Name - Geeeestr. 3 - 60313 Frankfurt/M.^Zahnarztpraxis G3^Dr. F. Name & Dr. K. Name^Geeeestr. 3^60313^Frankfurt/M.^
7590^Frau
Sigridblablabla0101-62222226^
Dr. F. Name & Dr. K. Name - Geeeestr. 3 - 60313 Frankfurt/M.^Zahnarztpraxis G3^Dr. F. Name & Dr. K. Name^Geeeestr. 3^60313^Frankfurt/M.^

Ausgabedatei Beispiel:
7569;x;Angelika;Heblabla;x;;x;#
7590;x;Sigrid;blablabla;x;;x;0111-66666666#

Es wird also in Feld Straße kein X gesetzt ?

So dachte ich(wenn ich dein script richtig verstanden habe, das in Zeile 6 (Feldnummern=Array das Feld nicht angegeben wäre und ich nur noch das Feld angeben muss?? Geh ich richtig in der Annahme, da Zählung bei 0 anfängt ich nur bei Array die 7 hinzufügen muss?

Script von dir:
Ein = "C:\Dokumente und Einstellungen\All Users\Desktop\Input\z1_patsel.dat"
Aus = "C:\Dokumente und Einstellungen\All Users\Desktop\output\Charly_Import.txt"
DelimAlt = "^"
DelimNeu = ";"
Zeilenende = "#"
FeldNummern = Array(6,8,9,11,12,13,14,17) 'benötigte Felder, Zählung beginnt bei 0

Set fso = CreateObject("Scripting.FileSystemObject")
'gesamten Dateiinhalt einlesen, leere Felder durch "x" ersetzen und in Zeilen aufteilen
Zeilen = Split(Replace(fso.OpenTextFile(Ein).ReadAll, DelimAlt & DelimAlt, DelimAlt & "x" & DelimAlt), vbNewLine)

For i = 1 To UBound(Zeilen) 'Kopfzeile überspringen
If Trim(Zeilen(i)) <> "" Then 'Leerzeilen nicht verarbeiten
Felder = Split(Zeilen(i), DelimAlt) 'Zeile in Felder aufspalten
A = A & vbNewLine & Trim(Felder(FeldNummern(0))) 'Zeilenschaltung und erstes Feld ohne Delimiter eintragen
For j = 1 To UBound(FeldNummern) 'übrige Feldnummern durchgehen
A = A & DelimNeu & Felder(FeldNummern(j)) 'weitere Felder mit vorangestelltem Delimiter hinzufügen
Next
A = A & Zeilenende 'Zeilenendekennung anfügen
End If
Next
fso.CreateTextFile(Aus).Write Mid(A, 3)'Inhalt schreiben, führende Zeilenschaltung in Zeile 1 überspringen

Würde mich freuen wenn ich Recht hätte, dann hätte ich ja dein script verstanden

Danke schonmal für deine Bemühungen

LG Frank
Bitte warten ..
Mitglied: Mit.ohne.Ahnung
17.05.2013, aktualisiert um 13:59 Uhr
Hallo bastla,

nachtrag....

habe das ganze nochmals geprüft

da ist mir aufgefallen das zwischendurch willkürlich kein x gesetzt wurde ??? Also nicht nur bei Straße

Hier scheint wohl doch ein tab oder leerzeichen in der spalte zu sein

in:
1495^Frau^^Ursula^^Name^ ^ ^ ^21.12.2010^^635518^
out:
1495;x;Ursula;Name; ; ; ;635518#
gruß Frank

[Edit Biber] Nochmal Codeformatierung nachgezogen. [/Edit]
Bitte warten ..
Mitglied: bastla
17.05.2013 um 15:22 Uhr
Hallo Mit.ohne.Ahnung!

Versuch es mit folgendem Ersatz der Zeilen ab 21:
01.
'gesamten Dateiinhalt einlesen, leere Felder durch "x" ersetzen und in Zeilen aufteilen 
02.
Zeilen = Split(fso.OpenTextFile(Ein).ReadAll, vbNewLine) 
03.
 
04.
For i = 1 To UBound(Zeilen) 'Kopfzeile überspringen 
05.
    If Trim(Zeilen(i)) <> "" Then 'Leerzeilen nicht verarbeiten 
06.
        Felder = Split(Zeilen(i), DelimAlt) 'Zeile in Felder aufspalten 
07.
        A = A & vbNewLine & Trim(Felder(FeldNummern(0))) 'Zeilenschaltung und erstes Feld ohne Delimiter eintragen 
08.
        For j = 1 To UBound(FeldNummern) 'übrige Feldnummern durchgehen 
09.
            W = Felder(FeldNummern(j))' Feldinhalt auslesen 
10.
            'Feldinhalte, die nur aus Leerzeichen und/oder einem TAB bestehen durch "x" ersetzen 
11.
            If Trim(W) = "" Or Trim(W) = vbTab Then W = "x" 
12.
            A = A & DelimNeu &  W'weitere Felder mit vorangestelltem Delimiter hinzufügen 
13.
        Next 
14.
        A = A & Zeilenende 'Zeilenendekennung anfügen 
15.
    End If 
16.
Next 
17.
fso.CreateTextFile(Aus).Write Mid(A, 3)'Inhalt schreiben, führende Zeilenschaltung in Zeile 1 überspringen
Grüße
bastla

BTW: Es sollte doch eigentlich nicht nötig sein, dass Biber für Dich die Formatierung (ja, die aus meinem ersten Kommentar oben) übernehmen muss ...
Bitte warten ..
Mitglied: Mit.ohne.Ahnung
17.05.2013 um 21:18 Uhr
Hallo bastla, hallo Biber,

sorry, keine Absicht ..... kommt nicht mehr vor

und danke bastla .... läuft jetzt Perfekt ! !

Grüße Frank
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

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

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

Ähnliche Inhalte
Batch & Shell
gelöst Alte Daten automatisch per Zip erstellen (4)

Frage von BEBBYs zum Thema Batch & Shell ...

Webbrowser
gelöst Daten in entfernte Mysql DB schreiben (3)

Frage von nullacht15 zum Thema Webbrowser ...

Microsoft Office
gelöst Excel Daten automatisch in mehrere Exceldateien exportieren (9)

Frage von paggo69 zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows Server
Mailserver auf Windows Server 2012 (8)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (8)

Frage von 1410640014 zum Thema Backup ...

DSL, VDSL
DSL-Signal bewerten (8)

Frage von SarekHL zum Thema DSL, VDSL ...