willimoeglich
Goto Top

Per Batch, 1.Lösung, alle Zeilenumbrüche aus einer TXT-Datei entfernen oder alternativ geziehlte Textblöcke aus einer TXT-Datei in eine zweite kopieren

Hallo, habe schon viele tolle Anregungen in diesem Forum gefunden, und hoffe ein Batch-Spezi findet sich und kann mein Problem lösen.

Ausgangsproblem ist, aus einer Text-Datei definierte Abschnitte in separate Text-Dateien zu kopieren. Die Ausgangsdatei hat folgendes Aussehen:

\\Berlin\Hauptstr8\Hotel_zum_Löwen
Hans.Meier keine Telefon
Werner.Meier kein Telefon
\\Berlin\Bahnhofstr11\Hotel An der Bahn
Ute.Wagner handy
\\Bonn\Uferstr888\Hotel zum Sonderzeichen$
Bernd.Richter isdn-telefon

In einer Steuerdatei habe ich alle Hotelnamen, welche per FOR-schleife ausgelesen werden. Für die jeweiligen Anschriften sollen nun in separaten TXT-Dateien, die Bewohnernamen
mit den Telefonangaben aus der Ausgangsdatei kopiert werden.
Mein erster Gedanke war, das mit FINDSTR und RegEx suche zu machen, aber das geht leider nur Zeilenweise und dazu müsste die ganze Ausgangsdatei in einer Zeile vorliegen.
Denn die \\ und der Hotelname sind immer vorhanden. Zwischen zwei mal vorkommenden \\ als zeilenanfang, hätte ich den Block den ich dann noch von den unwichtigen
Inhalten, wie Ort\Straße und Hotelname befreien könnte.
Falls es die Lösung vereinfacht, so kann ich auch vor jeder Anschriftenzeile eine Leerzeile einfügen.

Also erste Frage, wie bekomme ich alle Zeilenumbrüche aus der Ausgangsdatei haraus?

Wenn jemand eine andere Lösung, zum gezielten rauskopieren der Namenszeilen hat währe das auch nicht schlecht und als Alternative willkommen.

In den Zieldateien sollte dann folgendes stehen:
1.Datei soll heißen: Hotel_zum_Löwen.txt und beinhalten:
Hans.Meier keine Telefon
Werner.Meier kein Telefon
2.Datei soll heißen: Hotel an der Bahn.txt und beinhalten:
Ute.Wagner handy

usw.

Content-ID: 134145

Url: https://administrator.de/forum/per-batch-1-loesung-alle-zeilenumbrueche-aus-einer-txt-datei-entfernen-oder-alternativ-geziehlte-textbloecke-134145.html

Ausgedruckt am: 22.04.2025 um 02:04 Uhr

77559
77559 22.01.2010 um 18:39:23 Uhr
Goto Top
Hallo Willi,

deine Aufgabenstellung ist zwar nicht ganz eindeutig aber versuch es mal hiermit:

@Echo off&Setlocal
set Ausgangsdatei=.\Hotels.txt
if defined Hotel set "Hotel="  
For /f "delims=" %%A in (%Ausgangsdatei%) do Call :check "%%~A"  
Pause
Goto :eof
:Check
Set Line=%~1
if "%Line:~0,2%" EQU "\\" set "Hotel=%Line:~2%"&goto :NewHotel  
if defined Hotel Echo/%~11>>"%Hotel%.txt"  
goto :Eof
:NewHotel
If "%Hotel%" NEQ "%Hotel:*\=%" Set "Hotel=%Hotel:*\=%"&Goto :NewHotel  
Echo Neues Hotel=%Hotel%
:: hier noch mögliche Sonderzeichen aus Dateinamen entfernen/maskieren
:: z.Bsp. Doppelpunkt gegen Unterstrich
Set "Hotel=%Hotel::=_%"  
Goto :eof

Nur Teilweise getestet.

Gruß
LotPings
willimoeglich
willimoeglich 23.01.2010 um 11:38:25 Uhr
Goto Top
Hallo LotPings,
zunächst vielen Dank, für die schnelle Antwort/Lösung, sieht erst mal vielversprechend aus, muss nun sehen ob es sich an meine Situation anpassen lässt.
Hatte übersehen, dass nicht alle Hotelnamen mit dem String "Hotel" beginnen. Hotels beginnen schließlich nicht alle mit "Hotel...". Aber das macht nichts.
Falls ich es nicht hinkriege melde ich mich noch mal. Trotzdem ist die Lösung sehr elegant, wie ich finde. Die Befehlserweiterung und If define war mir nicht eingefallen.
Ich berichte dann später wie das Ergebnis aussieht.
Gruß Willi
77559
77559 23.01.2010 um 14:36:27 Uhr
Goto Top
Hallo Willi,
der String "Hotel" wird auch gar nicht gesucht.
Bei Zeilen welche mit "\\" beginnen wird der Abschnitt hinter dem letzten "\"Als Hotelname verwendet und in der Variablen "Hotel" gespeichert und solange als Dateiname verwendet bis er durch einen neuen Inhalt ersetzt wird.

Gruß
LotPings
TsukiSan
TsukiSan 23.01.2010 um 15:34:48 Uhr
Goto Top
also ganz eindeutig ist mir deine Frage nicht aber, wenn wir mal gaaanz langsam herangehen moechtest
du deine Ausgangsdatei "splitten". Weil Zeilenumbrueche sind ehr "vbCrLf".
Aber das alles in VBS zum Beispiel!
Also, wenn du nur "unterteilen" moechtest, dann google mal nach der SPLIT-Funktion in VBS oder so.
Ich meine, dass dich das ehr deinem Ziel naeher bringt.
Beispiel ind VBS fuer SPLIT and JOIN
Dim b()
Dim Delim

T = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"  
WScript.Echo "OriginalText: " & T  

Delim = "," 'ganzen String nach Kommas durchsuchen und bei jedem Komma splitten  
a = Split(T, Delim)

ReDim b(UBound(a))    'Alle "Einzelstücke" in ein Array (ohne Kommas!) einlesen   
For i = 0 To UBound(a) 
    b(i) = a(i)        
Next

Delim = "." 'Punkt zwischen die einzelnen Arrays einfügen und Ausgabe in GROSSBUCHSTABEN  
    c = UCase(Join(b, Delim))
WScript.Echo "Mit Punkt und gross: " & c  

Delim = ";" 'Semikolon zwischen die einzelnen Arrays einfügen und Ausgabe in kleinbuchstaben  
    c = LCase(Join(b, Delim))
Wscript.Echo "Mit Semikolon und klein: " & c  

msgbox ""  

Gruss
Tsuki
willimoeglich
willimoeglich 23.01.2010 um 18:13:22 Uhr
Goto Top
Hallo LotPings,
ja, die Antwort war etwas voreilig von mir. Habe nur ganz flüchtig drüber gesehen, sollte man ebend nicht machen.

Funktioniert übrigens prima, habe das ganze als CALL in mein vorbereitendes Script eingebaut. Brauchte bloß noch in Zeile 10 die "11" zur "1" machen
(war wohl ein Tipfehler) und schon war alles perfekt.
Ich habe es nun doch NICHT in eine For-schleife gepackt, sondern lösche die nicht benötigten "Hotel"-Dateien am ende einfach.
Also noch mal vielen Dank !

gruß Willi
willimoeglich
willimoeglich 23.01.2010 um 18:17:19 Uhr
Goto Top
Hallo Tsuki,
vielen dank für die Antwort, die Lösung ist auch nicht schlecht, nur lag mein Schwerpunkt darauf das ganze mit den Batch-Bordmittel zu lösen und nicht mit VBS.

Und das hat LotPings bestens umgesetzt.

Trotzdem vielen Dank !!!
Schon toll so ein Erfahrungsaustausch, mit soviel hilfbereiten Programmierern.

Gruß Willi