markuslb
Goto Top

Bestimmtes Zeichen durch Seitenumbruch ersetzen per Batch

Da ich hier neu bin erstmal an alle: Hallo zusammen.

Leider hat mir die bisherige Suche in diesem Forum nicht weitergeholfen, daher meine Frage:

Ich habe eine csv-Datei, in der leider alle Einträge nur per getrennt sind, sofern ich diese per Editor aufrufe. Dieses möchte ich gerne durch einen Seitenumbruch ersetzen, damit jeder Eintrag als eigene Zeile angezeigt wird.
Wie mache ich das?

Hinweis: Ich kann die Datei nicht mit Excel o.ä. aufrufen und speichern, da die Konvertierung nachts automatisch geschehen soll, damit die Datei nachts von einem anderen System weiterverarbeitet werden kann.

Aufbau der Datei:
Spalte1,Spalte2,Spalte3Spalte1,Spalte2,Spalte3 usw.

Ich habe schonmal was programmiert, aber das funktioniert leider nicht, da ich den String nicht kenne.

echo Setzen der Variablen
set "filename1=Datei1.csv-*"
set "filename2=Datei1-org.csv"
set "filename3=Datei1-bearb.csv"
set "filename4=Datei1.csv"

echo Fuege Seitenumbrueche ein

setlocal enabledelayedexpansion

for /F "delims=" %%a in (%filename2%) do (
set text=%%a
set text=!text:^=XXX! <- was muss ich für das XXX einsetzen?
echo !text!>>%filename3%
)

Content-ID: 162954

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

Ausgedruckt am: 25.11.2024 um 00:11 Uhr

bastla
bastla 18.03.2011 um 17:08:26 Uhr
Goto Top
Hallo MarkusLB und willkommen im Forum!

Sofern es keine heftigen Einwände gegen VBScript gibt, würde ich in diesem Fall darauf zurückgreifen (dann klappt's zB auch mit richtig großen Dateien):
Ein = "Datei1-org.csv"  
Aus = "Datei1.csv"  

Set fso = CreateObject("Scripting.FileSystemObject")  
fso.CreateTextFile(Aus).Write Replace(fso.OpenTextFile(Ein).ReadAll, "", vbCrLf)  
Bei Bedarf lassen sich die Dateinamen auch als Parameter übergeben ...

Es werden übrigens durch dieses Script Zeilen-, nicht Seitenümbrüche eingefügt ...

Grüße
bastla
jeb-the-batcher
jeb-the-batcher 18.03.2011 um 19:43:25 Uhr
Goto Top
Hallo MarkusLBS,

oder einfach
set text=!text:^=^

!

Die Leerzeile ist wichtig (sollte auch wirklich leer sein).

Klappt aber auch nur, wenn die Zeilen nicht zu lang sind (max ~8192 Zeichen)

Gruß
jeb
Itow15
Itow15 14.04.2011 um 11:09:28 Uhr
Goto Top
Hallo Zusammen ;)

Ich hoffe ihr und besonders jeb-the-batcher könnt mir auch erfolgreich helfen.

Aufgabe:

Eine txt-Datei Zeilenweise einlesen und bestimmte Zeichen löschen bzw. durch ein Absatz(Enter) ersetzen.

Inhalt der neu.txt:

b 28 xyz b 38 xyz b 48 xyz
b 28 xyz b 38 xyz b 48 xyz
b 28 xyz b 38 xyz b 48 xyz

Das soll dann in der test.txt wie folgt aussehen:

xyz
xyz
xyz
xyz
usw.…

Quasi alles schön untereinander anstatt nebeneinander
Hier nun mein Lösungsansatz (den ich mir zusammen kopiert habe …)

 
@ECHO
SETLOCAL enabledelayedexpansion

SET "quell_datei=neu.txt"  
SET "ziel_datei=test.txt"  

REM Loeschen der Ausgabedatei, falls sie (noch) existiert
IF EXIST %ziel_datei% (DEL /f %ziel_datei% 1>NUL 2>NUL)

REM Quell-Datei zeilenweise auslesen
REM und in Variable "zeile" schreiben  
FOR /f "delims=" %%i IN ('FINDSTR . "%quell_datei%"') DO (  
SET zeile=%%i& CALL :ersetzen !zeile!)
GOTO :weiter
:ersetzen
SET zeile=!zeile:b 28 =!
SET zeile=!zeile:b 38 =!
SET zeile=!zeile:b 48 =!
SET zeile=!zeile:^ =^

!

REM Inhalt der Variable "zeile" in die Ausgabedatei schreiben  
IF [!zeile!] EQU  (ECHO.>>%ziel_datei%) ELSE (ECHO !zeile!>>%ziel_datei%)
GOTO :eof

:weiter

pause

Das funktioniert soweit auch alles ganz gut die b 28 , b38 und b 48 werden entfernt nur wenn es daran geht das Leerzeichen durch ein Zeilenumbruch(Enter) zu ersetzen löscht er alle Leerzeichen so das alles zusammen steht

Ich hoffe ihr könnt mir helfen ich bin hier schon fast am Verzweifeln und bedanke mich bei jeden der mir weiter helfen kann

Gruss Itow
jeb-the-batcher
jeb-the-batcher 14.04.2011 um 11:24:31 Uhr
Goto Top
Hallo Itow,

ich denke schon, dass das Problem lösbar ist, allerdings solltest du erst mal eine neue Frage daraus machen(ist ja auch eine andere Frage als vorher), sonst sehen nur die Leute den Thread die dir beim ersten mal geantwortet haben

jeb
99045
99045 14.04.2011 um 11:25:08 Uhr
Goto Top
Hallo,

mit einer Leerzeile kannst du keinen Seitenvorschub erzeugen. Aber mach dir nichts draus, jtb hat immer solche irren Vorschläge. face-smile

Das Steuerzeichen für Seitenvorschub ist ^L (STRG-L). Ab besten änderst du deine Textdatei mit einem Editor, der dir die Eingabe von Steuerzeichen ermöglicht.
Vielleicht hat ja bastla eine bessere Lösungsmöglichkeit mit VBscript parat. face-wink


Gruß
bastla
bastla 14.04.2011 um 11:31:33 Uhr
Goto Top
@99045
Wenn doch jedes "xyz" (von dem wir allerdings sehr wenig wissen, insbes, ob es selbst Leerzeichen enthält) in eine neue Zeile soll, wäre ja
for %%i in (!zeile!) do >>%ziel_datei% echo %%i
der einfachste Ansatz ...
Aus "sportlichen Gründen" verzichte ich (vorläufig face-wink) auf VBS ...

Grüße
bastla

P.S.: @--Itow--
Willkommen im Forum! Falls der Ansatz noch nicht genügt, unterstütze ich jebs Vorschlag, einen neuen Thread zu beginnen ...
jeb-the-batcher
jeb-the-batcher 14.04.2011 um 11:45:42 Uhr
Goto Top
Zitat von @99045:
mit einer Leerzeile kannst du keinen Seitenvorschub erzeugen. Aber mach dir nichts draus, jtb hat immer solche irren
Vorschläge. face-smile

@99045

Er hat es auch nicht mit einem Leerzeichen versucht. face-wink

SET zeile=!zeile:^ =^

!

Ersetzt offensichtlich Leerzeichen durch Zeilenvorschübe.

jeb face-smile
99045
99045 14.04.2011 um 11:47:10 Uhr
Goto Top
@jtb
Verschone mich bitte zukünftig mit deinen geistigen Ergüssen und verteile deine Gunst bitte an andere, ja?
Danke.
Itow15
Itow15 14.04.2011 um 11:51:13 Uhr
Goto Top
Vielen vielen Dank euch es funktioniert ich bin so glücklich xD

Besondere Dank geht an bastla ;)

habe einfach

IF [!zeile!] EQU (ECHO.>>%ziel_datei%) ELSE (ECHO !zeile!>>%ziel_datei%)

mit

for %%i in (!zeile!) do >>%ziel_datei% echo %%i

ersetzt und schon funktioniert es da wäre ich nie drauf gekommen

vielen vielen dank

Gruß Itow

/edit

habe auch die

SET zeile=!zeile:^ =^

!

entfernt hat ich in der aufregung vergessen nochmal danke ;)