Leerzeichen am Ende eine Zeile Löschen. Leerzeichen im Rest der Zeile aber so bestehen lassen
Ich habe eine Datei die mit mehreren Spalten. Durch Leerzeichen sind die Einzelnen Einträge voneinander getrennt.
Es sind entweder 4 oder 5 Spalten. Und danach habe ich noch ein paar Leerzeichen.
Weil ich vorhere in manchen Zeilen was abschneiden mußte.
Jetzt möchte ich aber die Leerzeichen am Enden weg haben.
Ein
Funktioniert ja nicht weil dann sind ja auch die Leerzeichen dazwischen weg.
ich habe mir schon gedacht ich nehm jede Zeile untersuch dort das letzt Zeichen und wenn es ein Leezeich ist nehem ich es weg.
Aber wie ich das Batch Programmiertechnis Umstzte weiß ich nicht.
Kann mir Jemand dabei helfen.
Es sind entweder 4 oder 5 Spalten. Und danach habe ich noch ein paar Leerzeichen.
Weil ich vorhere in manchen Zeilen was abschneiden mußte.
Jetzt möchte ich aber die Leerzeichen am Enden weg haben.
Ein
for /F "Tokens=1-5 " %%b in (C:\org.log) do ( echo %%b,%%c,%%d,%%e,%%f >> C:\neues-org.log )
Funktioniert ja nicht weil dann sind ja auch die Leerzeichen dazwischen weg.
ich habe mir schon gedacht ich nehm jede Zeile untersuch dort das letzt Zeichen und wenn es ein Leezeich ist nehem ich es weg.
Aber wie ich das Batch Programmiertechnis Umstzte weiß ich nicht.
Kann mir Jemand dabei helfen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 184741
Url: https://administrator.de/contentid/184741
Ausgedruckt am: 26.11.2024 um 15:11 Uhr
8 Kommentare
Neuester Kommentar
Moin mycroftone,
etwa so für schließende (und führende!) Leerzeichen in einer Zeile:
Die Klammern in Zeile 5 für den Normalbetrieb entfernen - nur zur besseren Demonstration.
Der Dank geht an Biber - weil hier.
Freundliche Grüße von der Insel - Mario
etwa so für schließende (und führende!) Leerzeichen in einer Zeile:
@echo off
for /f "delims=" %%i in (C:\org.log) do @call :trim %%i
goto :eof
:trim
echo [%*] >> C:\org.neu
goto :eof
Die Klammern in Zeile 5 für den Normalbetrieb entfernen - nur zur besseren Demonstration.
Der Dank geht an Biber - weil hier.
Freundliche Grüße von der Insel - Mario
ich mache so etwas so:
1. zunächst alle Stellen vielen Leerzeichen ungerader Zahl durch suchen & ersetzen gegen nichts: entfernt alle größeren Gruppen mit drei Zeichen restlos.
2. Immer so weiter bis zu kleinen Zahlen wie drei Leerzeichen
2. dann haben wir nur noch gerade Anzahlen von Leerzeichen. Die entfernen durch suchen & ersetzen zweier Leerzeichen gegen nichts.
OK?
1. zunächst alle Stellen vielen Leerzeichen ungerader Zahl durch suchen & ersetzen gegen nichts: entfernt alle größeren Gruppen mit drei Zeichen restlos.
2. Immer so weiter bis zu kleinen Zahlen wie drei Leerzeichen
2. dann haben wir nur noch gerade Anzahlen von Leerzeichen. Die entfernen durch suchen & ersetzen zweier Leerzeichen gegen nichts.
OK?
@bastla,
ja also die leergezeichneten Trittbrettfahrer und meiner einer - ein gefährliches Gespann.
Danke für die Korrektur.
Einen schönen Feierabend und freundliche Inselgrüße - Mario
ja also die leergezeichneten Trittbrettfahrer und meiner einer - ein gefährliches Gespann.
Danke für die Korrektur.
Einen schönen Feierabend und freundliche Inselgrüße - Mario
Machst du das denn öfter und rechtfertigt es somit überhaupt ein Kommandozeilenscript?
Wenn du das öfter machst wäre n Skript natürlich sicherlich besser für ne automatische Verarbeitung.
Für nen Einzelfall würde ich in meinem Editor einfach das letzte Leerzeichen + Zeilenumbruch durch einen Zeilenumbruch ersetzen und gut ist.
Mit sed wäre das auch kein Problem ;)
Und ich nehme an, dass das mit nem Powershell-Skript auch kein Ding sein sollte.
Nur mal so als Denkanstoß.
Mit wilden Algorithmen zu gerader Anzahl von Leerzeichen tust du dir glaube nichts Gutes.
Achso ich sehe gerade dass am Ende mehrere Leerzeichen sein können, auch kein Ding mit regulären Ausdrücken.
Sollte in guten Texteditoren kein Thema sein und auch z.B. in der Powershell nicht, die sollte mit sowas umgehen können.
Bzw. könnte ich im Editor einfach Spaltenweise markieren und so die Leerzeilen loswerden, vorausgesetzt die Spalten sind gleich breit oder wurden durch Tabs getrennt.
Was mich zu der Frage führt woher die Daten überhaupt kommen und ob man nicht an der Daten erzeugenden Quelle schon für Verbesserungen sorgen könnte.
Fragen über Fragen... ist glaube noch zu früh. Mach mir schonwieder zuviele Gedanken über sone simple Sache. :D
Naja egal.... macht ihr mal
P.S. regulärer Ausdruck für ersetzen von Whitespace am Ende einer Zeile wäre dann "[[:s:]]*$" mit "\r\n" ersetzen. (ohne Änführungsstriche, Syntax kann sich unterscheiden, je nachdem wie/wo eingesetzt) Das ist jetzt Perl-Syntax innerhalb von UltraEdit. [[:s:]] = beliebiger Whitespace-Character, * = vorheriges Zeichen beliebig oft, $ = Zeilenende, "\r\n" = Carriage Return + Line Feed = neue Zeile unter Windows.
Wenn du das öfter machst wäre n Skript natürlich sicherlich besser für ne automatische Verarbeitung.
Für nen Einzelfall würde ich in meinem Editor einfach das letzte Leerzeichen + Zeilenumbruch durch einen Zeilenumbruch ersetzen und gut ist.
Mit sed wäre das auch kein Problem ;)
Und ich nehme an, dass das mit nem Powershell-Skript auch kein Ding sein sollte.
Nur mal so als Denkanstoß.
Mit wilden Algorithmen zu gerader Anzahl von Leerzeichen tust du dir glaube nichts Gutes.
Achso ich sehe gerade dass am Ende mehrere Leerzeichen sein können, auch kein Ding mit regulären Ausdrücken.
Sollte in guten Texteditoren kein Thema sein und auch z.B. in der Powershell nicht, die sollte mit sowas umgehen können.
Bzw. könnte ich im Editor einfach Spaltenweise markieren und so die Leerzeilen loswerden, vorausgesetzt die Spalten sind gleich breit oder wurden durch Tabs getrennt.
Was mich zu der Frage führt woher die Daten überhaupt kommen und ob man nicht an der Daten erzeugenden Quelle schon für Verbesserungen sorgen könnte.
Fragen über Fragen... ist glaube noch zu früh. Mach mir schonwieder zuviele Gedanken über sone simple Sache. :D
Naja egal.... macht ihr mal
P.S. regulärer Ausdruck für ersetzen von Whitespace am Ende einer Zeile wäre dann "[[:s:]]*$" mit "\r\n" ersetzen. (ohne Änführungsstriche, Syntax kann sich unterscheiden, je nachdem wie/wo eingesetzt) Das ist jetzt Perl-Syntax innerhalb von UltraEdit. [[:s:]] = beliebiger Whitespace-Character, * = vorheriges Zeichen beliebig oft, $ = Zeilenende, "\r\n" = Carriage Return + Line Feed = neue Zeile unter Windows.
moin mycroftone,
Immer 5 tokens? Dann Schreibe statt Kommata die Leerzeichen.
Wenn nur vier oder fünf Tokens sein sollen, prüfe auf ein 5. Token.
Sonst lass die Unterroutineden Müll die Leerzeichen am Zeilenende entsorgen:
[Edit] löschen der tmp-datei nachgetragen. [/Edit]
Gruß Phil
... das Batch Programmiertechnis Umstzte ...
Wie Bugs Bunny?Immer 5 tokens? Dann Schreibe statt Kommata die Leerzeichen.
Wenn nur vier oder fünf Tokens sein sollen, prüfe auf ein 5. Token.
@echo off
setlocal disabledelayedexpansion
if not exist "%~1" echo Datei nicht gefunden. 1>&2 &exit /b 1
(for /f "usebackq tokens=1-5 delims= " %%a in (%1) do if "%%e" neq "" (echo %%a %%b %%c %%d %%e
) else echo(%%a %%b %%c %%d
) >"%~dp1neues-%~nx1"
Sonst lass die Unterroutine
@echo off
setlocal disabledelayedexpansion
if not exist "%~1" echo Datei nicht gefunden. 1>&2 &exit /b 1
findstr /n "^" %1 1>"%~1.tmp"
(
for /f usebackqdelims^= %%a in ("%~1.tmp") do (set "Line=%%a"
call :Sub
))>"%~dp1neues-%~nx1"
if exist "%~1.tmp" del "%~1.tmp"
exit /b 0
:Sub
if "!OS!" neq "%OS%" setlocal enabledelayedexpansion
if "!Line:~-1!" equ " " set "Line=!Line:~ 0, -1!" &goto :Sub
echo(!Line:*:=!
goto :eof
Gruß Phil