Leerzeilen einfügen in Textdokument

Meggie_Spike

Grünschnabel
Hallo,

ich habe eine Textdatei die in einer Zeile wie folgt aufgebtaut ist

01.01.2021 01.01.21 12345 001 Text

wichtig ist das erste, zehnstellige Datum.
In der Zeile über diesem Datum soll eine Leerzeile eingefügt werden.
Sofern es nur zwei drei Datumsangaben sind, geht das ja noch manuell.

In meiner aktuellen Datei sind es aber rund 2000 Datumsangaben die überprüft und bearbeitet werden müssen.

Kann mir da jemand weiterhelfen?

Vielen Dank
 

Yaslaw

n/a
Moderator
Ich rekapituliere. Du hast Zeilen mit bis zu 2000 Datumseinträge. Wichtig davon ist jeweils nur das Erste.
Dann ist doch egal, ob 3 Datums oder 2000? Die ersten 10 Zeichen der Zeile sind entscheidend.

Und soll immer oberhalb eines bestimmten Datums eine Zeile eingefügt werden?
 

Meggie_Spike

Grünschnabel
In einer Zeile stehten die o.g. Angaben. Der Text kann aber durchaus mehrzeilig sein.
Aber vor jedem Datum im Format DD.MM.YYYY sollen oberhalb eine Leerzeile eingefügt werden.
 

Meggie_Spike

Grünschnabel
Testweise nur für den 01.01.2021

Mir fehlt eine Variable, die das Datumsformat DD.MM.YYYY erkennt und dann an allen Übereinstimmungen die Leerzeilen einfügt

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("I:\VBS\file.txt", 1)
strText = objFile.ReadAll
objFile.Close

wechsel1= Replace(strText, "01.01.2021", vbCRLF & "01.01.2021")
strNewText = wechsel1

Set objFile = objFSO.OpenTextFile("I:\VBS\file.txt", 2)
objFile.WriteLine strNewText
objFile.Close
 

Yaslaw

n/a
Moderator
OK, du arbeitest mit dem FSO. Finde ich gut. Das Auslesen und schreiben hast du also schon. Perfekt.

Wenn ich das richtig verstehe, dann willst du bei jedem Datum ein Umbruch erzeugen
Das Datum im Text kannst du mit RegExp erkennen

Test und erklärung des Patterns: regex101: build, test, and debug regex
Dieser Pattern ist ungenau, dafür einfach. Er nimmt 2Ziffern+Punkt+2Ziffern+Punkt+4Ziffern. Das heisst, 99.99.0000 währe auch als Datum erkannt. Meistens reicht es aber, da es sehr selten ist, dass ein Text dieses Format hat.
Das \b am Anfang und Ende stehen für TExtanfang/ende. Somit wird 111.11.1111 nicht als Datum erkannt, da davor eine 1 steht.

Visual Basic:
    Dim textIn$: textIn = "01.01.2021 05.12.2021 01.01.21 12345 001 Text"
 
    Dim rx As Object: Set rx = CreateObject("VBScript.RegExp")
    rx.Pattern = "\b(\d{2}\.\d{2}\.\d{4})\b"
    rx.Global = True
    rx.MultiLine = True
 
    Dim textOut$: textOut = rx.Replace(textIn, vbCrLf & "$1")
    Debug.Print textOut
Ausgabe:
Code:
01.01.2021
05.12.2021 01.01.21 12345 001 Text
Willst du, dass DD.MM.YY auch erkannt wiurd, dann musst du den Pattern leicht anpassen. (?:a|b) bedeutet, Entweder a oder b trifft zu.
Code:
\b\d{2}\.\d{2}\.(?:\d{2}|\d{4})\b
 
Zuletzt bearbeitet: