Meggie_Spike 0 Geschrieben 29. Juli 2021 Melden Teilen Geschrieben 29. Juli 2021 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 Zitieren Link zu diesem Kommentar
cj_berlin 1.315 Geschrieben 29. Juli 2021 Melden Teilen Geschrieben 29. Juli 2021 Moin, kannst Du mal ein Beispiel der Ausgangsdaten posten? spricht etwas dagegen, das mit PowerShell zu lösen statt mit VBS? Zitieren Link zu diesem Kommentar
Meggie_Spike 0 Geschrieben 29. Juli 2021 Autor Melden Teilen Geschrieben 29. Juli 2021 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 .... Zitieren Link zu diesem Kommentar
cj_berlin 1.315 Geschrieben 29. Juli 2021 Melden Teilen Geschrieben 29. Juli 2021 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... Zitieren Link zu diesem Kommentar
testperson 1.677 Geschrieben 29. Juli 2021 Melden Teilen Geschrieben 29. Juli 2021 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 Zitieren Link zu diesem Kommentar
daabm 1.354 Geschrieben 29. Juli 2021 Melden Teilen Geschrieben 29. Juli 2021 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... Zitieren Link zu diesem Kommentar
Beste Lösung testperson 1.677 Geschrieben 29. Juli 2021 Beste Lösung Melden Teilen Geschrieben 29. Juli 2021 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 } Zitieren Link zu diesem Kommentar
Meggie_Spike 0 Geschrieben 29. Juli 2021 Autor Melden Teilen Geschrieben 29. Juli 2021 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 Zitieren Link zu diesem Kommentar
cj_berlin 1.315 Geschrieben 29. Juli 2021 Melden Teilen Geschrieben 29. Juli 2021 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. Zitieren Link zu diesem Kommentar
daabm 1.354 Geschrieben 29. Juli 2021 Melden Teilen Geschrieben 29. Juli 2021 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 Zitieren Link zu diesem Kommentar
testperson 1.677 Geschrieben 30. Juli 2021 Melden Teilen Geschrieben 30. Juli 2021 vor 8 Stunden schrieb daabm: (auch wenn er beim ersten Check auf Tag und Monat die Zahlenranges vertauscht hat - oder sind das englische Dates? lol.. Hoppla. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.