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

Datei auslesen und Datensätze zusammenfassen

Frage Entwicklung VB for Applications

Mitglied: sputnik

sputnik (Level 2) - Jetzt verbinden

06.11.2012, aktualisiert 13:36 Uhr, 2925 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: sputnik
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: sputnik
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: sputnik
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: sputnik
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: sputnik
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 ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Batch & Shell
gelöst PowerShell, Log Datei auslesen, bei Änderungen E-Mail senden (12)

Frage von swissbull zum Thema Batch & Shell ...

Microsoft Office
Excel Dateien durchsuchen und Werte einzeln in neue Excel Datei auslesen (1)

Frage von krischanii zum Thema Microsoft Office ...

Batch & Shell
gelöst Variable aus ini Datei auslesen und weiterverwenden (17)

Frage von n0cturne zum Thema Batch & Shell ...

Batch & Shell
gelöst BATCH ini Datei Datei auslesen (2)

Frage von Juergen42 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (17)

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

Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...