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

Textdatei zeilenweise nach Datum sortieren

Frage Entwicklung VB for Applications

Mitglied: Gurkenhobel

Gurkenhobel (Level 1) - Jetzt verbinden

08.12.2014, aktualisiert 17:56 Uhr, 2025 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 ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Java
gelöst Textdatei in Array speichern (zeilenweise) (1)

Frage von Bruchsal zum Thema Java ...

Windows Server
gelöst Powershell array zeilenweise in Textdatei ausgeben (6)

Frage von Peter0816 zum Thema Windows Server ...

Datenbanken
Access 2010 - Filter für Datum funkioniert nicht VBA (4)

Frage von Dr.Cornwallis zum Thema Datenbanken ...

Heiß diskutierte Inhalte
Google Android
gelöst Android-Handy versehentlich (dauerhaft) gesperrt? (19)

Frage von FA-jka zum Thema Google Android ...

Batch & Shell
gelöst Ordner und Datei Name gleich (BATCH) (12)

Frage von clragon zum Thema Batch & Shell ...

Windows Server
SBS 2011 Standard virtualisieren (11)

Frage von HeinrichM zum Thema Windows Server ...

DSL, VDSL
gelöst DSL 200m verlängern (11)

Frage von Angela44 zum Thema DSL, VDSL ...