mickikausb

TXT Datei getrennt durch HOCHKOMMA SUCHEN ERSETZEN an neuem Ort unter gleichem Namen speichern

Aloha liebe Community,
eine ABAP Anwenderin wendet sich heute an euch, weil sie mit ihrem Latein am Ende ist ;)

Ich soll ein Migrationsprojekt betreuen bei welchem nach Abschaltung des ABAP System hunderte von UFT-8 codierte .txt Dateien erzeugt werden.
Der Inhalt dieser Dateien ist durch ' getrennt.

Im "normalen" Leben würde ich jetzt diese .txt Dateien manuell ins NOTEPAD ++ schieben und mit
SUCHEN + ERSETZEN - ' durch \n ersetzen an einem neuen Ort unter dem gleichen Namen speichern und dann diesen Ordner nach dem STRING mit STS+7++E01 durchsuchen.
Dummerweise erwarte ich an der Stelle, dass mehrere hundert Dateien im IMPORT geben wird, so das es quasi nach einer maschinellen Lösung schreit.
Ein paar Dutzend würde ich ja immer noch manuell machen wollen, aber bei der erwarteten Menge .... *UFF* wirds schwierig.

In Ordner IMPORT werden diese Dateien liegen und sollten nach dem STRING 'STS+7++E01' durchsucht werden,
wenn dieser gefunden wird, sollte in dieser Datei das ' durch einen Zeilenumbruch \n ersetzt werden und diese Datei im neuen Ordner OUTPUT mit dem gleichen Namen wie die Ursprungsdatei mit den Zeilenumbrüchen gespeichert werden.

Habt ihr eine schlaue WINDOWS Idee für mich, wie man das mit möglichst wenig Programmieraufwand realisieren könnte ?

Ich hab versucht mich durch die Forensuche zu wühlen, komme aber nicht wirklich zu einem Ergebnis, wie ich die Suche innerhalb der Datei nach dem String und dem Ersetzen sowie dem Speichern der Gesamten Datei unter dem gleichem Namen wie die Ursprungsdatei an einem neuen Ort realisieren kann.

Wenn mein ABAP System noch am Leben wäre und nicht im Archivmodus, dann würde ich die Dateien einfach einlesen, den String suchen und dann die notwendigen Daten in eine neue Tabelle schubsen ... das fällt aber leider durch den Archivmodus komplett aus face-sad

Ich hoffe ihr habt eine Idee ob und wie sich so was - am besten ohne Admin Rechte - im Windows realisieren lassen würde ?

Lieblichsten Gruß
Micki
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 43049273055

Url: https://administrator.de/forum/txt-datei-getrennt-durch-hochkomma-suchen-ersetzen-an-neuem-ort-unter-gleichem-namen-speichern-43049273055.html

Ausgedruckt am: 05.05.2025 um 16:05 Uhr

7907292512
Lösung 7907292512 21.08.2023 aktualisiert um 14:55:56 Uhr
Goto Top
Powershell z.B.
$source = "D:\import"  
$destination = "D:\output"  
foreach($file in Select-String -Path "$source\*.txt" -Pattern "STS+7++E01" -SimpleMatch | select -ExpandProperty Path){  
    (Get-Content $file -Raw) -replace "'","`r`n" | set-content "$destination\$([IO.Path]::GetFileName($file))"  
}
Gruß siddius
em-pie
em-pie 21.08.2023 um 13:55:29 Uhr
Goto Top
Moin,

Für die nativen Mausschubser, anstelle von Tastenstreichlern:
Man kann alternativ auch mit N++ in allen Dateien eines Verzeichnisses Suchen + Ersetzen anwenden:
npp_replace
MickiKausB
MickiKausB 21.08.2023 um 14:14:56 Uhr
Goto Top
Erst mal vielen lieben Dank für diese schnelle Lösung.

Leider funktionierte sie bei mir nicht. Ich kann das Ganze zwar mit Powershell ausführen, aber im OUTPUT Ordner kommt nichts an.

Ich hab mir die Dateien im INPUT Ordner mal genauer angeschaut, dummerweise sind auch tatsächlich ANSI codierte Dateien dazwischen, aber selbst wenn ich diese aus dem INPUT lösche, wird das Skript zwar ausgeführt, speichert aber keine Datei mit Zeilenumbrüchen im OUTPUT Ordner.
Obwohl UTF8 codierte .txt Dateien mit dem Suchstring (hab ich mal angepasst weil die Menge dann deutlich weniger wird für den Testfall) vorhanden sind.


Am Lesen der Dateien im INPUT Ordner die in folgender Struktur vorliegen

xx_xx__NUM1_NUM2_yyymmdd_NUM3_NUM4.txt

kann es wohl auch nicht liegen! Da ich hab ich es mal versucht mit Dateie namens 1.txt und auch diese Datei scheint das Skript nicht auszulesen und mit Leerzeilen versehen im OUTPUT zu speichern.

Zu schade, ich hab nämlich tatsächlich gedacht ich hätte verstanden wie das Skript funktionieren sollte ;)

Hast du noch eine Idee was ich ausprobieren könnte ?

$source = "C:\TEST\INPUT"    
$destination = "C:\TEST\OUTPUT"    
foreach($file in Select-String "$source\*.txt" -Pattern "STS+7++E03" -SimpleMatch | select -ExpandProperty Path){    
    (Get-Content $file -Raw -Encoding UTF8) -replace "'","`n"| set-content "$destination\$([IO.Path]::GetFileName($file))" -Encoding UTF8    
}
MickiKausB
MickiKausB 21.08.2023 um 14:17:51 Uhr
Goto Top
Zitat von @em-pie:

Moin,

Für die nativen Mausschubser, anstelle von Tastenstreichlern:
Man kann alternativ auch mit N++ in allen Dateien eines Verzeichnisses Suchen + Ersetzen anwenden:
npp_replace


Danke für den Hinweis, das hab ich tatsächlich noch nie wirklich probiert, aber werde ich auf jeden Fall versuchen. Ich bin mir nur nicht sicher wie die Performance da sein wird, wenn da wirklich wie angekündigt über 800 Dateien rumliegen sollten face-sad
7907292512
Lösung 7907292512 21.08.2023 aktualisiert um 14:51:54 Uhr
Goto Top
Leider funktionierte sie bei mir nicht. Ich kann das Ganze zwar mit Powershell ausführen, aber im OUTPUT Ordner kommt nichts an.
Das schreit nach der Powershell ExecutionPolicy
Starte das Skript in einer CMD mittels
powershell -EP Bypass -File "D:\Ordner\script.ps1"  
Skript selbst klappt hier einwandfrei in meinem Test, hatte es oben noch auf automatisches Encoding angepasst ...

Ansonsten ist der Pattern "STS+7++E01" nicht exakt oder euer Admin die Ausführung von Powershell Skripten verboten.

p.s. dein Skript hat den Pattern "STS+7++E03" mit einer 3 am Ende nicht wie du oben geschrieben hast mit einer 1
7907292512
7907292512 21.08.2023 aktualisiert um 15:08:41 Uhr
Goto Top
Hier auch noch mein Testaufbau:

Dateien:

screenshot

Quell-Ordner

screenshot


Zielordner nach Anwenden des Skripts

screenshot


Inhalt der Dateien nach dem Anwenden des Skripts

screenshot

Fazit: Does what you wanted in your post.
MickiKausB
MickiKausB 21.08.2023 um 15:08:26 Uhr
Goto Top
Zitat von @7907292512:

Leider funktionierte sie bei mir nicht. Ich kann das Ganze zwar mit Powershell ausführen, aber im OUTPUT Ordner kommt nichts an.
Das schreit nach der Powershell ExecutionPolicy hehe, genau das scheint das Problem gewesen zu sein!!!!
Starte das Skript in einer CMD mittels
powershell -EP Bypass -File "D:\Ordner\script.ps1"  
Mit dieser Methode klappt es einwandfrei ;) Vielen vielen Dank, du hast mir den Tag gerettet und vor allen Dingen jede Menge manuelle Handarbeit erspart face-smile Am liebsten würd ich mit nem gepflegten Bier drauf anstoßen dankööö face-smile

Skript selbst klappt hier einwandfrei in meinem Test, hatte es oben noch auf automatisches Encoding angepasst ...

Ansonsten ist der Pattern "STS+7++E01" nicht exakt oder euer Admin die Ausführung von Powershell Skripten verboten.

p.s. dein Skript hat den Pattern "STS+7++E03" mit einer 3 am Ende nicht wie du oben geschrieben hast mit einer 1
Jupp das hatte ich extra so angepasst, damit die Menge der Daten für den Testfall entsprechend weniger wird face-smile Hat übrigens super geklappt!!

Danke euch! Ihr seid super.
Ich markiere das hier mal als erledigt face-smile