Entferne alle semikolons, die am ende einer zeile stehen (wenn vorhanden)
konnte mein anliegen leider nicht mit den vorhandenen beiträge beheben. drum habe ich mir erlaubt, meine frage zu posten. falls doch schon so etwas behandelt wurde, bin ich für einen link sehr dankbar.
moin,
ich habe mehrere csv-files mit einigen hundert zeilen, die teilweise ein ";" am ende der zeile aufweisen.
leider tritt das völlig unregelmäßig auf: die eine zeile hat ein ";" am ende, die nächste nicht.
ich brauche die csv-files ohne semikolon.
gibt's eventuell eine möglichkeit zu sagen: entferne alle semikolons (wenn vorhanden), die am ende einer zeile stehen ?
das fragt sich... jabali07
Gruß & Danke
moin,
ich habe mehrere csv-files mit einigen hundert zeilen, die teilweise ein ";" am ende der zeile aufweisen.
leider tritt das völlig unregelmäßig auf: die eine zeile hat ein ";" am ende, die nächste nicht.
ich brauche die csv-files ohne semikolon.
gibt's eventuell eine möglichkeit zu sagen: entferne alle semikolons (wenn vorhanden), die am ende einer zeile stehen ?
das fragt sich... jabali07
Gruß & Danke
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 182625
Url: https://administrator.de/contentid/182625
Ausgedruckt am: 22.11.2024 um 11:11 Uhr
10 Kommentare
Neuester Kommentar
Hallo jabali07!
Etwa so (falls es jeweils nur ein Semikolon am Ende der Zeile geben kann):
Mit "§" ist übrigens ein Zeichen gemeint, das nicht in den Dateien vorkommt ...
Falls auch mehrere Semikola am Zeilenende stehen könnten:
Grüße
bastla
[Edit]
Etwa so (falls es jeweils nur ein Semikolon am Ende der Zeile geben kann):
@echo off & setlocal
set "Ordner=D:\Der Ordner mit den vielen CSV"
set "Dateien=*.csv"
set T=%temp%\CSVTemp.txt
pushd "%Ordner%"
for /f "delims=" %%i in ('dir /b "%Dateien%"') do (
move "%%i" %T%
(
for /f "eol=§" %%a in (%T%) do (
set "Zeile=%%a"
setlocal enabledelayedexpansion
if "!Zeile:~-1!"==";" (echo(!Zeile:~,-1!) else (echo !Zeile!)
endlocal
)
)>"%%i"
)
popd
Falls auch mehrere Semikola am Zeilenende stehen könnten:
@echo off & setlocal
set "Ordner=D:\Der Ordner mit den vielen CSV"
set "Dateien=*.csv"
set T=%temp%\CSVTemp.txt
pushd "%Ordner%"
for /f "delims=" %%i in ('dir /b "%Dateien%"') do (
move "%%i" %T%
for /f "eol=§" %%a in (%T%) do set "Zeile=%%a" & call :ProcessLine "%%i"
)
popd
goto :eof
:ProcessLine
if not defined Zeile goto :Done
if "%Zeile:~-1%" neq ";" goto :Done
set "Zeile=%Zeile:~,-1%"
goto :ProcessLine
:Done
setlocal enabledelayedexpansion
>>%1 echo(!Zeile!
endlocal
goto :eof
bastla
[Edit]
echo\
durch echo(
ersetzt [/Edit]
Guten Abend,
also für so eine Aufgabe würde ich kein Programm schreiben. Ich nutze auch auf Windowsrechnern den Editor vim, folgendes Kommando kann man in vim verwenden:
wenn man die entsprechende Datei geöffnet hat, im einzelnen bedeutet das Kommando % (gesamte Datei), s (ersetze) ;$ (Semikolon am Zeilenende) // (nix)
Falls, wie bastla vermutet, auch mehrere Semikola am Zeilenende stehen können funktioniert auch
auf einem Linuxrechner geht's natürlich auch mit sed
auch hier der allgemeine Fall mit mehreren Semikola am Ende
Ich hab im Job auch meistens mit Windows zu tun, aber es gibt Dinge, die kann ich mit Unix-Werkzeugen einfacher erledigen. Nix für ungut.
Markus
also für so eine Aufgabe würde ich kein Programm schreiben. Ich nutze auch auf Windowsrechnern den Editor vim, folgendes Kommando kann man in vim verwenden:
:%s/;$//
Falls, wie bastla vermutet, auch mehrere Semikola am Zeilenende stehen können funktioniert auch
:%s/;\+$//
auf einem Linuxrechner geht's natürlich auch mit sed
sed -i "s/;$//" Dateiname
sed -i "s/;\+$//" Dateiname
Ich hab im Job auch meistens mit Windows zu tun, aber es gibt Dinge, die kann ich mit Unix-Werkzeugen einfacher erledigen. Nix für ungut.
Markus
Hallo jabali,
ich nehme an, es ist das Skript von bastla was bei Dir nicht richtig funktioniert. Bist Du denn sicher, dass Du es richtig abgetippt (bzw. kopiert hast?).
Poste hier mal bitte das Skript, welches Du benutzt.
Markus
ich nehme an, es ist das Skript von bastla was bei Dir nicht richtig funktioniert. Bist Du denn sicher, dass Du es richtig abgetippt (bzw. kopiert hast?).
Poste hier mal bitte das Skript, welches Du benutzt.
Markus
Moin jabali07,
ich bin gerade über den Beitrag gestolpert und habe die Lösung von bastla vor ein paar Tagen für mich adaptiert, deswegen hier ein Vorschlag:
Beachte bitte Zeilen 10 und 13.
Viel Erfolg, ein schönes Wochenende und freundliche Grüße von der Insel - Mario
ich bin gerade über den Beitrag gestolpert und habe die Lösung von bastla vor ein paar Tagen für mich adaptiert, deswegen hier ein Vorschlag:
@echo off & setlocal
set "Ordner=D:\Der Ordner mit den vielen CSV"
set "Dateien=*.csv"
set T=%temp%\CSVTemp.txt
pushd "%Ordner%"
for /f "delims=" %%i in ('dir /b "%Dateien%"') do (
move "%%i" %T%
(
for /f "delims=" %%a in (%T%) do (
set "Zeile=%%a"
setlocal enabledelayedexpansion
if "!Zeile:~-1!"==";" (echo !Zeile:~,-1!) else (echo !Zeile!)
endlocal
)
)>"%%i"
)
popd
Beachte bitte Zeilen 10 und 13.
Viel Erfolg, ein schönes Wochenende und freundliche Grüße von der Insel - Mario