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, 2079 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 ...

Batch & Shell
gelöst (Batch) Datum Sortier-Mechanismus (19)

Frage von clragon zum Thema Batch & Shell ...

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

Frage von Peter0816 zum Thema Windows Server ...

Neue Wissensbeiträge
Windows Server

Umstellung SHA 1 auf SHA 2 - Migration der CA von CSP auf KSP

Tipp von Badger zum Thema Windows Server ...

Windows 10

Quato DTP94 unter Windows 10 x64 installieren und verwenden

Anleitung von anteNope zum Thema Windows 10 ...

Windows 10

Win10 1703 und Nutzerkennwörter bei Ersteinrichtung - erstaunliche Erkenntnis

(15)

Erfahrungsbericht von DerWoWusste zum Thema Windows 10 ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
CNC Maschinen verlieren Netzwerkverbindung (kurioser Fehler) (22)

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

Drucker und Scanner
Erfahrungen mit Enterprise-Tintenstrahldruckern A4 und A3 (14)

Frage von User1000 zum Thema Drucker und Scanner ...

Webentwicklung
Aktuellen Mitarbeiter auf Homepage anzeigen (13)

Frage von alemanne21 zum Thema Webentwicklung ...