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

Datei auslesen und Datensätze zusammenfassen

Frage Entwicklung VB for Applications

Mitglied: 48507

48507 (Level 2)

06.11.2012, aktualisiert 13:36 Uhr, 3066 Aufrufe, 13 Kommentare

Moin!

Ich habe eine Datei, die so aufgebaut ist:

01PersonalnummerX NameNachnameWohnort 
02PersonalnummerX AndereDaten Daten 
05PersonalnummerX AndereDaten Daten 
01PersonalnummerY NameNachnameWohnort 
02PersonalnummerY AndereDaten Daten 
06PersonalnummerY DatenDaten 
08PersonalnummerY DatenDaten
Zu der Datei gehört eine Beschreibung, in der steht, wie lang eine Spalte ist. Ich muss also die "Strings" auseinander nehmen.

01 markiert immer den Datensatz-Anfang (Stammdaten), alles, was dahinter kommt, sind "historische" Daten.

Problem: Wenn ich die Datei zeilenweise auslese, wie kann ich dann die historischen Daten "anhängen"? Ziel: Eine CSV-Datei, die dann so aussieht:

01;PersonalnummerX;Name;Nachname;Wohnort;02;PersonalnummerX;AndereDaten;Daten;05;PersonalnummerX;AndereDaten;Daten 
01;PersonalnummerY;Name;Nachname;Wohnort;02;PersonalnummerY;AndereDaten;Daten;06PersonalnummerY;Daten;Daten;08;PersonalnummerY;Daten;Daten
Die Personalnummer ist eindeutig. Zeilenweise einlesen ist auch kein Problem. Jedoch: Wie hänge die Daten hinten dran?

Jemand eine Idee?

Danke!
Mitglied: andimue
06.11.2012 um 13:02 Uhr
Servus sputnik,

in was für eine "Sprache" willst du denn die csv erstellen: vbs, batch, powershell oder ist das egal?

Also im Batch würde ich die Datei Zeile für Zeile lesen und mir eine Variable aufbauen, die ich solange ergänze, bis der nächste 01-Satz kommt, dann kannst du die Variable in eine Datei ausgeben.
Das Problem wird wohl eher das Zerlegen anhand der "Beschreibung" sein. Ist diese Beschreibung fix oder kann die sich immer mal wieder ändern?
Bitte warten ..
Mitglied: 48507
06.11.2012, aktualisiert um 13:27 Uhr
Die Beschreibung ist fix, jedenfalls im Moment. Hm, ich stehe auf dem Schlauch. An welcher Stelle genau muss ich das Array füllen? Bin soweit gekommen:

01.
    Do Until objTextFile.AtEndOfStream 
02.
         
03.
		ZeileTemp = objTextFile.Readline 
04.
						 
05.
		IF InStr(Left(ZeileTemp,2), "01") THEN 
06.
									 
07.
			FertigeZeile = Mid(ZeileTemp,1,2) _ 
08.
			& ";" & trim(Mid(ZeileTemp,3,12)) _ 
09.
                        .... 
10.
                        .... 
11.
			objFile.WriteLine FertigeZeile 
12.
				 
13.
                END IF 
14.
		 
15.
    Loop 
16.
 
Muss wohl die Zeilen vorher zählen? Die Anzahl der historischen Zeilen ist variabel.
Bitte warten ..
Mitglied: TsukiSan
06.11.2012, aktualisiert um 13:26 Uhr
Das Problem wird wohl eher das Zerlegen anhand der "Beschreibung" sein.
Ich sehe das Problem bei folgendem:
die fertige CSV-Datei soll so aufgebaut sein:
01;PersonalnummerY;Name;Nachname;Wohnort;02;PersonalnummerY;AndereDaten;
Wenn nicht klar definiert ist, wie die ; hinkommen, da wird es eng werden

Gruss
Tsuki
Bitte warten ..
Mitglied: 48507
06.11.2012 um 13:28 Uhr
Definiert ist es in der "Beschreibung". Bsp: Feld1: Länge 2, von 1 bis 2. Die Beschreibung ist aber nicht das Problem...
Bitte warten ..
Mitglied: TsukiSan
06.11.2012, aktualisiert um 13:34 Uhr
Hallo sputnik,

bei der "ersten" Zeile 01 hast du mittels
01.
mid(,1,2) 
02.
'und 
03.
mid(,3,12)
definiert, wie das da aussieht.
Wie und wo soll das ; danach gesetzt werden? Gibt es im Datensatz
Trennzeichen ?

Gruss
Tsuki
Bitte warten ..
Mitglied: 48507
06.11.2012, aktualisiert um 13:40 Uhr
Das ; wird ergänzt durch:

01.
& ";" &
Trennzeichen gibt es eben nicht, aber dank der Beschreibung weiß ich, wo ein Feld zu Ende ist... deswegen auch das mid().
Bitte warten ..
Mitglied: TsukiSan
06.11.2012 um 14:08 Uhr
Nun, dann würde ich das ganze in "Pakete" aufteilen und dann die einzelnen Zeilen drinnen "zusammenfassen".

Beispiel:
01.
Set FSO = CreateObject("Scripting.FileSystemObject") 
02.
MeineDaten = Split(FSO.OpenTextFile("MeineDatenbank.db", 1).ReadAll,"01")
Das jetzige Array MeineDaten hat nun alle anderen Daten zwischen "01" enthalten.
Diese könnten dann mittels
01.
For i = 0 to Ubound(MeineDaten) 
02.
MeinDatensatz = Split(MeineDaten(i),vbrclf) 
03.
'...weitere Aufsplittung und Zusammenführung 
04.
Next
zusammengefügt werden. JOIN wäre eine Möglichkeit.

Guss
Tsuki
Bitte warten ..
Mitglied: 48507
06.11.2012 um 14:17 Uhr
01 kann aber auch in den Daten stehen, z.B. in Datumsangaben. Trotzdem danke
Bitte warten ..
Mitglied: TsukiSan
06.11.2012 um 14:35 Uhr
Dann natürlich zeilenweise einlesen und zusammenfügen.
Sorry, aber ich glaubte, es gäbe eine einfachere Lösung für dich.

Deine Anforderung gibt zu viele Möglichkeiten. Das kann eine CPU "wuschig" machen.
Eventuell hat jemand die Blitzidee.

Viele Grüße

Tsuki
Bitte warten ..
Mitglied: pieh-ejdsch
06.11.2012 um 15:11 Uhr
moin,

Zu der Datei gehört eine Beschreibung, in der steht, wie lang eine Spalte ist. Ich muss also die "Strings" auseinander nehmen.
Und wie sieht davon eine Zeile aus?
Anhand dieser kann doch jede Spalte abgezählt werden.

Gruß Phil
Bitte warten ..
Mitglied: bastla
06.11.2012, aktualisiert um 15:22 Uhr
Hallot sputnik!

Nur ganz nebenbei:
01 kann aber auch in den Daten stehen, z.B. in Datumsangaben.
Die Kombination
vbNewline & "01"
aber wohl eher nicht ; dann wäre nur zu beachten, dass im ersten Arrayelement das "01" am Anfang übergangen wird:
MeineDaten(0) = Mid(MeineDaten(0), 3)
Grüße
bastla
Bitte warten ..
Mitglied: 48507
07.11.2012, aktualisiert um 15:19 Uhr
Also ich habe es jetzt so gemacht:

- Datensätze jeweils in eine Datei ausgelagert (pro Personalnummer)
- Zeilenumbrüche aus der Datei entfernt
- aus diesen Dateien eine zusammengesetzt

Ist vielleicht bescheuert, funktioniert aber (Ich hab's nicht so mit VBScript)

Weiß einer zufällig, ob man direkt beim Zusammensetzen der Variablen eine Überprüfung machen kann (Wenn "-" vorhanden, dann setzte es nach Vorne)? Oder muss ich über Zwischenvariablen gehen (bei so vielen - sehr mühsam...).

Wahrscheinlich nicht, oder? Siehe oben im Quelltext, Zeilen 7-10.
Bitte warten ..
Mitglied: TsukiSan
07.11.2012, aktualisiert um 15:34 Uhr
Hallo sputnik,

Also ich habe es jetzt so gemacht:

Wie hast du es so gemacht?

Lass uns teilhaben an deinem Tun und wir helfen.

Viele Grüsse

Tsuki
Bitte warten ..
Ähnliche Inhalte
VB for Applications
Excel: Makro soll mehrer Dateien auslesen und in einer neuen Datei zusammenfassen
Frage von Michelle1995VB for Applications12 Kommentare

Hallo zusammen, ich suche ein Makro, mit dem ich aus mehreren Exceltabellen, die alle in einem Verzeichnis liegen, die ...

VB for Applications
VBA Excel Dateien zusammenfassen
Frage von cberndtVB for Applications3 Kommentare

Hi Leute. Ich bin dabei einen Ordner mit Excellisten zusammenzufassen. Im Ordner sind gut 600 einzelne Excel Dateien die ...

VB for Applications
Ordner mit mehreren csv. Dateien in eine Excel Datei zusammenfassen
gelöst Frage von Metal008VB for Applications23 Kommentare

Hallo, ich stehe vor folgendem Problem. Ich möchte enorme Datenmengen in eine Excel, oder auch Access Datei zusammenfassen. Ich ...

KiXtart
PDF-Dateien zusammenfassen und als Postscript auf drucker schicken
Frage von KLBlerKiXtart

Hallo zusammen, ich habe folgendes Problem; ich erhalte PDF-Daten von unserem ERP-System, diese landen in einer Verzeichnisfreigabe. Anschließend starte ...

Neue Wissensbeiträge
Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 8 StundenBatch & Shell8 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 10 StundenHumor (lol)6 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 1 TagMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 1 TagSicherheit1 Kommentar

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Heiß diskutierte Inhalte
Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server17 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows 10
Windows 10 dunkler Bildschirm nach Umfallen
Frage von AkcentWindows 1015 Kommentare

Hallo, habe hier einen Windows 10 Rechner der von einem User umgefallen wurde (Beine übers Knie, an den PC ...

Windows 10
Bitlocker nach Verschlüsselung nicht mehr aufrufbar!
gelöst Frage von alexlazaWindows 1013 Kommentare

Hallo, ich besitze ein HP ZBook 17 G4 mit einem Windows 10 Pro Betriebssystem. Bei diesem Problem handelt sich, ...

Batch & Shell
Neuste Datei via PowerShell kopieren
gelöst Frage von kaiuwe28Batch & Shell11 Kommentare

Hallo zusammen, ich hatte mir mit Hilfe der Suche im Forum einen kleinen Code von colinardo rausgesucht und versucht ...