Jump to content

Datum ersetzen in Textdatei


Direkt zur Lösung Gelöst von testperson,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo,

 

ich habe eine Textdatei, in der sehr vielen einzelne Datumsangaben stehen. Zur weiteren Verarbeitung dieser Textdatei, in einem separaten Programm, soll vor jedem auftretendem Datum im Format DD.MM.YYYY

eine Leerzeile eingefügt werden.

 

Bisher waren das immer nur wenige Datumsangaben, aber in einer aktuellen Textdatei sind es über 1000 einzelne Datumsangaben.

 

Wie kann ich das mit vbscript lösen.

 

Vielen Dank

 

 

 

 

 

Link zu diesem Kommentar

Hallo,

 

ist im Endeffekt aufgebaut wie ein Kontoauszug einer Bank.

 

Das Datum um das es geht ist das Buchungsdatum, dahinter steht das Valutadatum, danach eine Programmnummer und die Auszugsnummer gefolgt vom Buchungstext und dem Betrag

 

01.01.2021     01.01.21      12345     1     Buchungstext xyz     Betrag

 

Gerne auch Power Shell ....

 

 

 

 

Link zu diesem Kommentar

Moin,

dann liest Du die Datei komplett ein, gehst sie Zeile für Zeile durch und schaust Dir jeweils den Anfang der Zeile an. Matcht er auf einen Datumswert, fügst Du eine leere Zeile ein. Anschließend gibst Du die aktuelle Zeile wieder aus.

Versuche es zu skripten (Wichtige Stichworte sind Get-Content, foreach, -match und Add-Content), wenn Du Probleme hast, poste Deinen Code und Fehlermeldungen bzw. was nicht funktioniert...

Link zu diesem Kommentar

Hi,

 

die Logik in "grob" hättest du hier schonmal:

$Lines = @(
    "01.01.2021     01.01.21      12345     1     Buchungstext xyz     Betrag",
    "02.02.2021     01.01.21      12345     1     Buchungstext xyz     Betrag",
    "Kein Datum     NeinNein      12345     1     Was auch immer       Moep",
    "03.03.2021     01.01.21      12345     1     Buchungstext xyz     Betrag"
)

foreach($Line in $Lines){
    if($Line -match "^[01]{1}[0123456789]{1}.[0123]{1}[0123456789]{1}.\d{4}"){
        $Line = -join ("`n", $Line)
    }
    Write-Output $Line
}

 

Gruß

Jan

Link zu diesem Kommentar
  • Beste Lösung

Aber, aber, aber ich bin doch gar nicht der Olaf. :-)

Regex war halt für "mal schnell" einfacher, aber ich will mal nicht so sein. ;)

 

$Lines = @(
    "01.01.2021     01.01.21      12345     1     Buchungstext xyz     Betrag",
    "02.02.2021     01.01.21      12345     1     Buchungstext xyz     Betrag",
    "Kein Datum     NeinNein      12345     1     Was auch immer       Moep",
    "03.03.2021     01.01.21      12345     1     Buchungstext xyz     Betrag"
)

foreach($Line in $Lines){
    try{
        $dummy = [datetime]$Line.Split(" ")[0]
        $Line = -join ("`n", $Line)
    } catch{
        # No
    }
    Write-Output $Line
}

 

Link zu diesem Kommentar
vor 43 Minuten schrieb daabm:

Olaf, ich würde das nicht per Regex lösen - wenn das eine festspaltenorientierte Tabelle ist: Per Substring zerlegen, dann Get-Date :-)

Und die Grundsatzfrage wäre mal wieder - was soll "eigentlich" erreicht werden? "Weitere Verarbeitung" ist etwas unspezifisch...

Hallo, was soll erreicht werden?

 

Ganz einfach, eine Leerzeile oberhalb des Datums. Diese Leerzeile wird eben für die weitere Verarbeitung der Textdatei benötigt.

 

Grüße

vor 7 Minuten schrieb testperson:

Aber, aber, aber ich bin doch gar nicht der Olaf. :-)

Regex war halt für "mal schnell" einfacher, aber ich will mal nicht so sein. ;)

 


$Lines = @(
    "01.01.2021     01.01.21      12345     1     Buchungstext xyz     Betrag",
    "02.02.2021     01.01.21      12345     1     Buchungstext xyz     Betrag",
    "Kein Datum     NeinNein      12345     1     Was auch immer       Moep",
    "03.03.2021     01.01.21      12345     1     Buchungstext xyz     Betrag"
)

foreach($Line in $Lines){
    try{
        $dummy = [datetime]$Line.Split(" ")[0]
        $Line = -join ("`n", $Line)
    } catch{
        # No
    }
    Write-Output $Line
}

 

 

Hallo, habe jetzt leider keinen Windows Rechner mehr zur Hand. Werde das morgen mal ausprobieren.

Vielen dank schon einmal.

 

Grüße

Link zu diesem Kommentar
vor 2 Stunden schrieb Meggie_Spike:

Hallo, was soll erreicht werden?

 

Ganz einfach, eine Leerzeile oberhalb des Datums. Diese Leerzeile wird eben für die weitere Verarbeitung der Textdatei benötigt.

 

Sorry, aber aus langer Erfahrung: Nein, das soll nicht erreicht werden, das ist schon der erste Schritt der Lösung - vermutlich. Ich weiß leider nicht, wie das weiter verarbeitet wird, aber vermutlich gibt es viele andere Lösungsansätze?

 

Und wenn es wirklich nur um eine Leerzeile geht, ist zu wenig über den Input bekannt. Wenn DD.MM.YYYY wirklich immer ganz vorne steht, brauchst Du ja nur eine Leerzeile zwischen allen bereits existierenden Zeilen...

 

get-content <INPUTFILE> | % { '' | Out-File <OUTPUTFILE> -Append; $_ | Out-File <OUTPUTFILE> -Append}

wäre meine ungetestete Kurzversion davon.

 

Ansonsten ist der Ansatz von Jan (aka Olaf - sorry, passiert halt mal :-) ) durchaus geeignet (auch wenn er beim ersten Check auf Tag und Monat die Zahlenranges vertauscht hat - oder sind das englische Dates? :-) ). Für mich mit den von mir geäußerten Einwänden :-)

vor 3 Stunden schrieb testperson:

Regex war halt für "mal schnell" einfacher, aber ich will mal nicht so sein. ;)

Regex ist halt Stringmassage - und auf den PSConfs hab ich gelernt (und verinnerlicht): If you can use an object, do so. Ein Datum ist ein Date-Objekt, eine Datei ein File-Objekt usw.

Mag jetzt spitzfindig klingen, aber wenn Du mit Strings anfängst, endest Du in verknäulten Strings :-)

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...