pbelcl
Goto Top

Strichpunkt gegen CR-Linefeed in Textdatei ersetzen

Hi Leute,

Ich habe eine TExtdatei, die von einem System automatisch erzeugt wird.
Dort stehen Emailadressen in einer langen Wurst drinnen, die immer durch ein Semikolon (;) getrennt sind.

email1@domain.com;email2@domain.com;email3@domain.com;email4@domain.com;email5@domain.com;email6@domain.com;

Ich muss nun dafür sorgen, dass JEDE Adresse in einer Zeile steht und die Semikolons verschwinden

email1@domain.com
email2@domain.com
email3@domain.com
email4@domain.com
email5@domain.com
email6@domain.com

Speziell das Ersetzen ist für mich schwierig, da ich die Zeichencodes vom Zeilenumbruch nicht kenne ....
Habt ihr einen Tipp oder ein Codeschnipsel, wie ich das mit einer Batchdatei schaffe?

Content-ID: 221615

Url: https://administrator.de/forum/strichpunkt-gegen-cr-linefeed-in-textdatei-ersetzen-221615.html

Ausgedruckt am: 23.12.2024 um 07:12 Uhr

certifiedit.net
certifiedit.net 10.11.2013 um 18:24:25 Uhr
Goto Top
Hallo,

probier es mal mit \n ;)

Beste Grüße,

Christian
bastla
bastla 10.11.2013 um 20:33:40 Uhr
Goto Top
Hallo pbelcl!

Aufgrund der Einschränkungen von Batch würde ich zu VBS raten:
Ein = "D:\Textdatei.txt"  
Aus = "D:\Adressen.txt"  

Set fso = CreateObject("Scripting.FileSystemObject")  
fso.CreateTextFile(Aus).Write Replace(fso.OpenTextFile(Ein).ReadAll, ";", vbNewline)  
Grüße
bastla
pbelcl
pbelcl 10.11.2013 aktualisiert um 21:08:30 Uhr
Goto Top
Hallo Bastla,

An diesen Einschränkungen scheitere ich offensichtlich seit Stunden...
Irgendwas mit der Übergabe des "\n" an den Ausgabestring hat sich massiv gewehrt face-wink
Egal!

Habs gerade erfolgreich mit deinem VBS-Code zum laufen gebracht, ist wirklich super!!
Danke für die schnelle Hilfe!!
Endoro
Endoro 10.11.2013 um 22:20:05 Uhr
Goto Top
Hi, die Einschränkungen kann ich grad nicht sehen face-smile
(for %%a in (email1@domain.com;email2@domain.com;email3@domain.com;email4@domain.com;email5@domain.com;email6@domain.com;) do @echo %%a)>file.txt
lg.
bastla
bastla 10.11.2013 um 22:25:24 Uhr
Goto Top
@ Endoro
... dann schau mal bei MS vorbei ... face-wink

Grüße
bastla
colinardo
colinardo 11.11.2013 aktualisiert um 11:43:02 Uhr
Goto Top
Hallo pbelcl,
könntest du z.B. so machen:
@echo off & setlocal
set fileIN=test.txt
set fileOUT=test2.txt
for /f "usebackq delims=" %%a IN ("%fileIN%") DO @(  
  for %%b IN (%%a) DO @(echo %%b>>"%fileOUT%")  
)
Hier bist du aber wie @bastla schon erwähnt hat, eingeschränkt was die maximale Länge einer Zeile angeht (8.191 Zeichen) .
Mit der Powershell könntest du es so ohne Beschränkung machen:
Get-Content "E:\dateiIN.txt" | %{$_.Replace(";","`r`n")} | Set-Content "E:\dateiOUT.txt"  
Grüße Uwe
Endoro
Endoro 11.11.2013 um 11:33:53 Uhr
Goto Top
Hi,
sed for Windows benötigt double quotes (Zollzeichen), hier in colinardo's Beispiel gehts aber ganz ohne: sed s/;/\n/g file.txt, der 'beste' sed-Befehl ist sed y/;/\n/ file.txt, am allerbesten ist aber der 'Unix'-Befehl <file.txt tr ; \n
lg.
pbelcl
pbelcl 11.11.2013 um 19:47:13 Uhr
Goto Top
Hallo Ihr Lieben,

Toll wieviele Vorschläge ich von euch bekomme!!
Gebt mir ein bisschen Zeit, ich werde mir das alles ansehen!

Danke vorerst mal für die vielen Tipps!
pbelcl
pbelcl 12.11.2013 um 16:45:46 Uhr
Goto Top
Habe mir die unterschiedlichen Vorschläge angesehen und entschieden dass ich die VBS Variante nehme.
Einfacher Grund:
Mein Testfile hat schon 1890 Zeichen!
Wird im Echtbetrieb möglicherweise über die 8000er Grenze kommen, somit bleib ich sicherheitshalber bei der VBS Variante von bastla!
Obwohl ich normalerweise "plain Batch" immer bevorzuge face-wink

Da ich sehr selten solche Lösungen brauche, ist mein Wissen dahingehend immer etwas eingetrocknet!
Deshalb bin ich bin echt dankbar dass es euch gibt!!
Danke an alle die sich für meine Lösung den Kopf zerbrochen haben ....