Suchen und ersetzten mit Bedingung
Hallo,
ich muss in einer Datei Zeile für Zeile überprüfen. Ich muss das 2. und 3. "-" durch " " ersetzten, wenn die Zeile mit einem 1. " -" beginnt.
So sieht meine Datei aus (Die Leerzeichen werden leider nicht angezeigt).
56651 xxxxx 11712 09.01.12 265,85 316,36
-56651 xxxxx 11712 09.01.12 -265,85 -316,36
56653 xxxxx 13500 10.01.12 -45,00 -53,55
Also nochmals:
Ich muss die Minusse vor den Beträgen durch ein Leerzeichen ersetzten, wenn die Zeile mit einem Minus beginnt (Vor dem Minus sind 2 Leerzeichen).
In dem Beispiel müssten jetzt die Minusse vor den Zahlen in Zeile 2 durch ein Leerzeichen ersetzt werden. In Zeile 3 müssen die Minusse bleiben.
So sollte es aussehen:
56651 xxxxx 11712 09.01.12 265,85 316,36
-56651 xxxxx 11712 09.01.12 265,85 316,36
56653 xxxxx 13500 10.01.12 -45,00 -53,55
Hab Ihr eine Idee?
ich muss in einer Datei Zeile für Zeile überprüfen. Ich muss das 2. und 3. "-" durch " " ersetzten, wenn die Zeile mit einem 1. " -" beginnt.
So sieht meine Datei aus (Die Leerzeichen werden leider nicht angezeigt).
56651 xxxxx 11712 09.01.12 265,85 316,36
-56651 xxxxx 11712 09.01.12 -265,85 -316,36
56653 xxxxx 13500 10.01.12 -45,00 -53,55
Also nochmals:
Ich muss die Minusse vor den Beträgen durch ein Leerzeichen ersetzten, wenn die Zeile mit einem Minus beginnt (Vor dem Minus sind 2 Leerzeichen).
In dem Beispiel müssten jetzt die Minusse vor den Zahlen in Zeile 2 durch ein Leerzeichen ersetzt werden. In Zeile 3 müssen die Minusse bleiben.
So sollte es aussehen:
56651 xxxxx 11712 09.01.12 265,85 316,36
-56651 xxxxx 11712 09.01.12 265,85 316,36
56653 xxxxx 13500 10.01.12 -45,00 -53,55
Hab Ihr eine Idee?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 181022
Url: https://administrator.de/forum/suchen-und-ersetzten-mit-bedingung-181022.html
Ausgedruckt am: 22.04.2025 um 14:04 Uhr
20 Kommentare
Neuester Kommentar
Hallo,
Dann setze diese doch in code tags mit type=plain. Hier nachzulesen Formatierungen in den Beiträgen.
<code "type=plain">
56651 xxxxx 11712 09.01.12 265,85 316,36
-56651 xxxxx 11712 09.01.12 -265,85 -316,36
56653 xxxxx 13500 10.01.12 -45,00 -53,55
Gruß,
Peter
Dann setze diese doch in code tags mit type=plain. Hier nachzulesen Formatierungen in den Beiträgen.
<code "type=plain">
56651 xxxxx 11712 09.01.12 265,85 316,36
-56651 xxxxx 11712 09.01.12 -265,85 -316,36
56653 xxxxx 13500 10.01.12 -45,00 -53,55
Gruß,
Peter
Hallo zeed78 und willkommen im Forum!
Etwa so:
Ich habe mal vorausgesetzt, dass es in der Datei keine erhaltenswerten Leerzeilen gibt [Edit] und dass die nicht angezeigten Leerzeichen nicht am Anfang der Zeile stehen [/Edit]...
Grüße
bastla
Etwa so:
@echo off & setlocal
set "Ein=D:\Datei1.txt"
set "Aus=D:\Datei2.txt"
del "%Aus%" 2>nul
for /f "usebackq delims=" %%i in ("%Ein%") do set "Zeile=%%i" & call :ProcessLine
goto :eof
:ProcessLine
if "%Zeile:~,1%" neq "-" (>>"%Aus%" echo %Zeile% & goto :eof)
set "Zeile=%Zeile:-= %"
>>"%Aus%" echo -%Zeile:~1%
goto :eof
Grüße
bastla
Hallo zzed78!

[Edit] Unter der Annahme, dass das dritte Zeichen (deswegen "2" in der Zeile 11) vom Beginn der Zeile an zu prüfen ist, sähe das dann so aus:
Leerzeilen werden so weiterhin nicht "mitgenommen" ...
[/Edit]
Grüße
bastla
Leider sind die Leerzeichen wichtig.
Dann poste doch bitte (damit sich genau feststellen lässt, wo denn nun welche sind), wie schon von Pjordorf vorgeschlagen, die Beispieldatei in der gleichen Formatierung wie den Batch gerade eben ...Ich würde auch gerne die datei fibujour einfach überschreiben, und keine neu anlegen.
Dazu braucht es ja nur die eine zusätzliche Zeilemove "%Aus%" "%Ein%"
Dazu kommt noch eines, was ich ausgeixt habe sind eigentlich Kurznamen. Diese können auch Sonderzeichen wie "&" oder "," enthalten.
Sollten wir sonst noch etwas wissen? [Edit] Unter der Annahme, dass das dritte Zeichen (deswegen "2" in der Zeile 11) vom Beginn der Zeile an zu prüfen ist, sähe das dann so aus:
@echo off & setlocal
set "Ein=fibujour"
set "Aus=%temp%\fibujour"
del "%Aus%" 2>nul
for /f "usebackq delims=" %%i in ("%Ein%") do set "Zeile=%%i" & call :ProcessLine
move "%Aus%" "%Ein%"
goto :eof
:ProcessLine
if "%Zeile:~2,1%" neq "-" goto :Ausgabe
set "Zeile=%Zeile:-= %"
set "Zeile= -%Zeile:~3%"
:Ausgabe
setlocal enabledelayedexpansion
>>"%Aus%" echo %Zeile% & goto :eof
endlocal
goto :eof
[/Edit]
Grüße
bastla
Hallo zeed78!
Grüße
bastla
Wenn ich erst nach dem Namenskürzel die "-" ersetzten will ...
... ist das genau das, was der Batch schon macht - es wird ja in Zeile 13 die Zeile neu zusammengebaut nach dem Schema 2 Leerzeichen + "-" + Rest der Zeile (es wurden vorweg schon alle "-" in Leerzeichen umgewandelt, daher die 3 Leerzeichen am Anfang überspringen) ab Position 4 ...Grüße
bastla
Hallo zeed78!
Dann versuch es mit folgendem Verarbeitungsteil:
Grüße
bastla
Dann versuch es mit folgendem Verarbeitungsteil:
:ProcessLine
if "%Zeile:~2,1%" neq "-" (
echo "%Zeile%"|findstr "-">nul && set "Zeile= -%Zeile:~3%"
goto :Ausgabe
)
set "Zeile=%Zeile:-= %"
set "Zeile= -%Zeile:~3%"
:Ausgabe
setlocal enabledelayedexpansion
>>"%Aus%" echo !Zeile! & goto :eof
endlocal
goto :eof
bastla
Hallo zeed78!
Inzwischen hatte ich etwas Zeit zum Testen:
Grüße
bastla
Inzwischen hatte ich etwas Zeit zum Testen:
:ProcessLine
if "%Zeile:~2,1%" neq "-" (
echo "%Zeile%"|findstr "\-" >nul && set "Zeile= -%Zeile:~3%"
goto :Ausgabe
)
set "Zeile=%Zeile:-= %"
set "Zeile= -%Zeile:~3%"
:Ausgabe
setlocal enabledelayedexpansion
>>"%Aus%" echo !Zeile!
endlocal
goto :eof
bastla