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-Key: 221615

Url: https://administrator.de/contentid/221615

Printed on: April 19, 2024 at 22:04 o'clock

Member: falscher-sperrstatus
falscher-sperrstatus Nov 10, 2013 at 17:24:25 (UTC)
Goto Top
Hallo,

probier es mal mit \n ;)

Beste Grüße,

Christian
Member: bastla
bastla Nov 10, 2013 at 19:33:40 (UTC)
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
Member: pbelcl
pbelcl Nov 10, 2013 updated at 20:08:30 (UTC)
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!!
Member: Endoro
Endoro Nov 10, 2013 at 21:20:05 (UTC)
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.
Member: bastla
bastla Nov 10, 2013 at 21:25:24 (UTC)
Goto Top
@ Endoro
... dann schau mal bei MS vorbei ... face-wink

Grüße
bastla
Member: colinardo
colinardo Nov 11, 2013 updated at 10:43:02 (UTC)
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
Member: Endoro
Endoro Nov 11, 2013 at 10:33:53 (UTC)
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.
Member: pbelcl
pbelcl Nov 11, 2013 at 18:47:13 (UTC)
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!
Member: pbelcl
pbelcl Nov 12, 2013 at 15:45:46 (UTC)
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 ....