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, 2008 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
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ä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
gelöst SQL-Abfrage - DISTINCT - letztes Datum (3)

Frage von emeriks zum Thema Datenbanken ...

Heiß diskutierte Inhalte
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 ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...