Jump to content

Datum ersetzen in Textdatei


Go to solution Solved by testperson,

Recommended Posts

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 to post

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 to post

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 to post

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 to post

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

Link to post
  • Solution

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 to post
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 to post
vor 2 Minuten schrieb Meggie_Spike:

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

 

PowerShell (in dem hierfür benötigten Umfang) läuft auch auf Linux und Mac.

Link to post
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 to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...