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

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, 1859 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 ..
Ähnliche Inhalte
Microsoft Office
EMail auslesen, verschieben und mit Excel ausgelesene Daten weiterverarbeiten
gelöst Frage von GundelputzMicrosoft Office37 Kommentare

Hallo da draussen, Ich habe mal wieder eine Problemstellung bei der ich eure Hilfe brauche. Ich habe, in Outlook ...

Webbrowser
Daten in entfernte Mysql DB schreiben
gelöst Frage von nullacht15Webbrowser3 Kommentare

Hi, ich beschäftige mich derzeit mit einem System, bestehend aus einigen Sensoren, welches Daten regelmäßig ausliest und diese in ...

IDE & Editoren
UltraEdit: Textdatei für Excel aufbereiten
gelöst Frage von newbie58IDE & Editoren12 Kommentare

Hallo, ich habe eine Textdatei (Ausschnitte aus einem NC-Programm) die wie folg aussieht: 5112281 ; NC_JOB: 30001 VORFRAESEN AUSLASSSEITE ...

Entwicklung
Benutzerzugriff auf ein Programm automatisch beenden
gelöst Frage von imebroEntwicklung56 Kommentare

Hallo, in einem anderen Thread ) hatte ich danach gefragt, wie man den Servermanager mit einem Unterpfad per Script ...

Neue Wissensbeiträge
Windows 10

Windows 10 Hello-Anmeldung per Foto ausgehebelt

Tipp von kgborn vor 3 StundenWindows 10

Windows Hello ist eine Funktion, um sich per Fingerabdruck-, Gesichts- oder Iriserkennung bei Windows 10-Geräten anzumelden (siehe), setzt aber ...

Perl

Perl hat heute Geburtstag: 30 Jahre Perl: Lange Gesichter zum Geburtstag

Information von Penny.Cilin vor 10 StundenPerl2 Kommentare

Hallo, auch wenn es wenige wissen und noch weniger Leute es nutzen. Perl hat heute Geburtstag. 30 Jahre Perl ...

Sicherheit

Blackberry stirbt - Keine Updates für Priv mehr

Tipp von certifiedit.net vor 11 StundenSicherheit1 Kommentar

Blackberry wird zu einer 08/15 Firma und geht wohl mehr und mehr den Weg, den HTC schon ging. Von ...

Windows 10

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

Tipp von kgborn vor 2 TagenWindows 1012 Kommentare

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

Heiß diskutierte Inhalte
Windows Server
SCCM 2016: PXE Boot des Clients schlägt fehl
Frage von gabeBUWindows Server23 Kommentare

Hallo Zusammen Ich habe eine Testumgebung erstellt um über SCCM 2016 einen virtuellen Client aufzusetzen. Folgende Maschinen habe ich ...

Netzwerkgrundlagen
Belibiges Teilnetz einer Subnetzmaske rausfinden?
gelöst Frage von CenuzeNetzwerkgrundlagen19 Kommentare

Wundervollen Gutentag, mittlerweile kann ich Subnetting so einigermaßen, aber ein Problem habe ich noch. Netzwerkadresse und Boradcast errechnen ist ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless12 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Exchange Server
Exchange empfängt Emails - Kann aber keine Senden
gelöst Frage von niklasschaeferExchange Server11 Kommentare

Hallo, ich stehe gerade bei mir zuhause vor folgender Problemstellung. Gegeben sind 2x Hyper-V Host mit Windows Server 2016 ...