Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

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

Textdatei zeilenweise nach Datum sortieren

Frage Entwicklung VB for Applications

Mitglied: Gurkenhobel

Gurkenhobel (Level 1) - Jetzt verbinden

08.12.2014, aktualisiert 17:56 Uhr, 2090 Aufrufe, 2 Kommentare, 1 Danke

Hallo Gemeinde,

mehrere umfangreiche Textdateien, in denen zeilenweise wichtige Daten und Termine eingetragen sind, sollen zeilenweise nach dem Datum sortiert und in eine neue Texdatei geschrieben werden.
Das besondere an der Datumssortierung ist die sogenannten Chroniksortierung, d.h. zuerst nach dem Monat (Stelle 4-5), dann nach dem Wochentag (1-2) und zuletzt nach dem Jahr (Stellen 7-10).
Das Datum im deutschen Format (TT.MM.JJJJ - mit führenden Nullen) steht immer an erster Stelle, nach einem Leerzeichen folgt der eigentliche Text.

Beim Googeln habe ich zwar einige Lösungen in PHP, Perl oder für Linux gesehen, ich hätte aber gerne ein Script in VBS. Ich danke im voraus.
Mitglied: colinardo
LÖSUNG 08.12.2014, aktualisiert um 18:28 Uhr
Hallo Gurkenhobel,
probiers mal hiermit:
01.
'Konstanten 
02.
Const FILE_IN = "C:\termine.txt" 
03.
Const FILE_OUT = "C:\termine_sortiert.txt"  
04.
Const AD_LONGCHAR = 201 
05.
Const AD_INT = 3 
06.
'Variablen 
07.
Dim strNewContent,arrContent,fso,objList,line,strDate,f_out 
08.
'Objekte 
09.
Set objList = CreateObject("ADOR.Recordset") 
10.
Set fso = CreateObject("Scripting.Filesystemobject") 
11.
'Spalten des Recordsets erstellen 
12.
objList.Fields.Append "DD", AD_INT 
13.
objList.Fields.Append "MM", AD_INT 
14.
objList.Fields.Append "YYYY", AD_INT 
15.
objList.Fields.Append "Text", AD_LONGCHAR,1 
16.
objList.Open 
17.
'Datei in Array einlesen 
18.
arrContent = Split(fso.OpenTextFile(FILE_IN,1).ReadAll(),vbNewLine) 
19.
'Für jede Zeile im Array einen Eintrag im Recordset hinzufügen 
20.
For Each line In arrContent 
21.
	If line <> "" Then 
22.
		objList.AddNew 
23.
		objList("DD").Value = Left(line,2) 
24.
		objList("MM").Value = Mid(line,4,2) 
25.
		objList("YYYY").Value = Mid(line,7,4) 
26.
		objList("Text").Value = line 
27.
		objList.Update 
28.
	End If 
29.
Next 
30.
'Recordset sortieren 
31.
objList.Sort = "MM ASC,DD ASC,YYYY ASC" 
32.
 
33.
'Recordset in Datei ausgeben 
34.
Set f_out = fso.OpenTextFile(FILE_OUT,2,True) 
35.
objList.MoveFirst 
36.
While Not objList.EOF 
37.
	f_out.WriteLine objList("Text").Value 
38.
	objList.MoveNext 
39.
Wend 
40.
f_out.Close 
41.
 
42.
MsgBox "Finished" 
43.
 
44.
Set fso = Nothing 
45.
Set objList = Nothing
Grüße Uwe

-edit- kleinere Optimierungen
Bitte warten ..
Mitglied: Gurkenhobel
08.12.2014, aktualisiert um 19:05 Uhr
Hallo Uwe,

das ist genau das, was ich wollte - kurz und schmerzlos. Besonders freut es mich natürlich, daß auch längere Zeilen mit meh als 256 Zeichen nicht abgeschnitten werden.
Die Zeile 13
objList.Fields.Append "Text", 200,256 
hat da wohl keinen Einfluss...

Vielen Dank und beste Grüße

Micha
Bitte warten ..
Ähnliche Inhalte
Java
gelöst Textdatei in Array speichern (zeilenweise) (1)

Frage von Bruchsal zum Thema Java ...

Batch & Shell
gelöst Batch: Textdatei Zeilenweise auslesen (2)

Frage von CreatorX zum Thema Batch & Shell ...

Tipps & Tricks
FTP Hosting nach Letzte Änderungen sortieren (2)

Frage von table1 zum Thema Tipps & Tricks ...

Batch & Shell
gelöst Erstellungsdatum vor jede Zeile einer Textdatei schreiben (5)

Frage von freakonaleash zum Thema Batch & Shell ...

Neue Wissensbeiträge
Sicherheit

Millionen Euro in den Sand gesetzt?

(3)

Information von transocean zum Thema Sicherheit ...

Sicherheit

How I hacked hundreds of companies through their helpdesk

Information von SeaStorm zum Thema Sicherheit ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Eine Netzwerkdose im Wechsel für zwei unterschiedliche Netze (12)

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

Netzwerke
Mobile Einwahl IPSec VPN von iPhone iPad T-Mobile zur Pfsense (11)

Frage von Spitzbube zum Thema Netzwerke ...

Voice over IP
SNOM D765 an LancomR883VAW (10)

Frage von MS6800 zum Thema Voice over IP ...

Windows Netzwerk
Ordner-Freigabe außerhalb der Domäne (9)

Frage von Remsboys zum Thema Windows Netzwerk ...