Sonderzeichen auf csv Datei auslesen und in neuer Datei abspeichern
Hallo,
ich habe eine csv Datei wo Sonderzeichen enthalten sind.
Nun hättte ich gerne die Zeilen wo die Sonderzeichen sind
in einer neuen txt Datei.
Kann man das mit einer Batchdatei machen?
Gruß Krebs62
ich habe eine csv Datei wo Sonderzeichen enthalten sind.
Nun hättte ich gerne die Zeilen wo die Sonderzeichen sind
in einer neuen txt Datei.
Kann man das mit einer Batchdatei machen?
Gruß Krebs62
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 178725
Url: https://administrator.de/contentid/178725
Ausgedruckt am: 21.11.2024 um 21:11 Uhr
20 Kommentare
Neuester Kommentar
Hallo Krebs62 und willkommen im Forum!
Was sind in diesem Fall "Sonderzeichen"?
Für zB Umlaute und "ß" könntest Du es etwa so versuchen:
Dabei ist aber zu beachten, dass in der CMD-Shell ASCII und in Windows ANSI zur Codierung verwendet wird ...
... wenn daher die CSV-Datei ANSI-codiert ist, könntest Du eine Textdatei "D:\Sonderzeichen.txt" (mit einem Windows-Editor) mit dem folgenden Inhalt:
erstellen und es dann so versuchen:
Grüße
bastla
Was sind in diesem Fall "Sonderzeichen"?
Für zB Umlaute und "ß" könntest Du es etwa so versuchen:
findstr "Ä ä Ö ö Ü ü ß" "D:\Dateialt.csv">"D:\Dateineu.csv"
... wenn daher die CSV-Datei ANSI-codiert ist, könntest Du eine Textdatei "D:\Sonderzeichen.txt" (mit einem Windows-Editor) mit dem folgenden Inhalt:
Ä
ä
Ö
ö
Ü
ü
ß
findstr /g:"D:\Sonderzeichen.txt" "D:\Dateialt.csv">"D:\Dateineu.csv"
bastla
Hallo,
wenn du mir verrätst, was der richtige Buchstabe von § ist, dann ja.
Versuchs mal so:
Eine Ersetzen.txt:
Batch.bat:
MfG,
Mathe172
wenn du mir verrätst, was der richtige Buchstabe von § ist, dann ja.
Versuchs mal so:
Eine Ersetzen.txt:
š=s
Ÿ=Y
Š=S
@echo off
>"Ausgabe.csv" (for /f "tokens=1* delims=:" %%A in ('findstr /n "^" "Ausgang.csv"') do ((set "Line=%%B") & (for /f "usebackq tokens=1* delims==" %%C in ("Ersetzen.txt") do call set "Line=%%Line:%%C=%%D%%") & call echo.%%Line%%))
^ ^ ^
I I I
Hier ist die Ergebnisdatei Hier die Ausgangsdatei Und hier die Ersetzungsdatei
MfG,
Mathe172
Hallo,
Vielleicht weiss ja sonst noch jemand was... aber schau bitte nochmal nach und beschreibe was passiert. Dann können wir dir besser helfen.
MfG,
Mathe172
Leider funktioniert der Batch nicht.
Komisch... bei mir funktionierts auch mit den beiden in der Liste...- Hast du beide Zeilen exakt kopiert? Geht am besten über Quelltextlink oder den "in den Speicher kopieren"-Link
- Was ist das Ergebnis? Falsch? Leer? Gar nicht vorhanden? Was passiert wenn du die Batch aus dem CMD-Fenster startest?
Vielleicht weiss ja sonst noch jemand was... aber schau bitte nochmal nach und beschreibe was passiert. Dann können wir dir besser helfen.
MfG,
Mathe172
Hallo Krebs62 und mathe172!
Grundsätzlich funktioniert mathes Ansatz - Ausnahme: Leerzeilen, aber die haben in einer CSV ohnehin nix verloren - wenn die dann tatsächlich ignoriert werden (können), lässt sich das noch etwas kompakter schreiben:
Grüße
bastla
Grundsätzlich funktioniert mathes Ansatz - Ausnahme: Leerzeilen, aber die haben in einer CSV ohnehin nix verloren - wenn die dann tatsächlich ignoriert werden (können), lässt sich das noch etwas kompakter schreiben:
@echo off & setlocal
>"Ausgabe.csv" (for /f "usebackq delims=" %%A in ("Ausgang.csv") do ((set "Line=%%A") & (for /f "usebackq delims=" %%C in ("Ersetzen.txt") do call set "Line=%%Line:%%C%%") & call echo.%%Line%%))
bastla
Hallo Krebs62!
Bei mir sieht das dann so aus:
Die "Ausgabe.csv" in "notepad.exe" (daher ANSI-codiert):
Das Ganze unter Verwendung der folgenden "Ersetzen.txt" (ebenfalls per "notepad.exe" angezeigt):
Grüße
bastla
Bei mir sieht das dann so aus:
D:\TEMP>type Ersetzen.cmd
@echo off & setlocal
>"Ausgabe.csv" (for /f "usebackq delims=" %%A in ("Ausgang.csv") do ((set "Line=
%%A") & (for /f "usebackq delims=" %%C in ("Ersetzen.txt") do call set "Line=%%L
ine:%%C%%") & call echo.%%Line%%))
D:\TEMP>type Ausgang.csv
11 11 BåRETTE SCH. PTFE KB 10 ML
11 11 SPåLBåRSTE MIT NYLONBORSTEN
11 11 KASTENRåCKWAND-ELOXIERUNG 5-TLG
11 11 KASTENRåCKWAND-ELOXIERUNG 8-TLG
16 16 GLASRåHRSTÇBE 20 CM
16 16 GLASRåHRSTÇBE 25 CM
16 16 GLASRåHRSTÇBE 30 CM
D:\TEMP>Ersetzen
D:\TEMP>type Ausgabe.csv
11 11 B▄RETTE SCH. PTFE KB 10 ML
11 11 SP▄LB▄RSTE MIT NYLONBORSTEN
11 11 KASTENR▄CKWAND-ELOXIERUNG 5-TLG
11 11 KASTENR▄CKWAND-ELOXIERUNG 8-TLG
16 16 GLASR▄HRST─BE 20 CM
16 16 GLASR▄HRST─BE 25 CM
16 16 GLASR▄HRST─BE 30 CM
D:\TEMP>
11 11 BÜRETTE SCH. PTFE KB 10 ML
11 11 SPÜLBÜRSTE MIT NYLONBORSTEN
11 11 KASTENRÜCKWAND-ELOXIERUNG 5-TLG
11 11 KASTENRÜCKWAND-ELOXIERUNG 8-TLG
16 16 GLASRÜHRSTÄBE 20 CM
16 16 GLASRÜHRSTÄBE 25 CM
16 16 GLASRÜHRSTÄBE 30 CM
†=Ü
€=Ä
§=Ö
š=s
Ÿ=Y
Š=S
bastla
Hallo Krebs62!
Bei meinem Test befinden sich alle Dateien im selben Ordner - es spricht aber nix dagegen, auch in diesem Fall vollständige Pfade zu verwenden, also etwa:
Damit wäre sicher gestellt, dass die Dateien gefunden werden. Den Batch solltest Du übrigens über den "Quelltext"-Link in einem neuen Fenster darstellen lassen und von dort (in den Code klicken, dann
Etwas übersichtlicher ließe sich das auch noch so schreiben:
Grüße
bastla
Bei meinem Test befinden sich alle Dateien im selben Ordner - es spricht aber nix dagegen, auch in diesem Fall vollständige Pfade zu verwenden, also etwa:
@echo off & setlocal
>"D:\TEMP\Ausgabe.csv" (for /f "usebackq delims=" %%A in ("D:\TEMP\Ausgang.csv") do ((set "Line=%%A") & (for /f "usebackq delims=" %%C in ("D:\TEMP\Ersetzen.txt") do call set "Line=%%Line:%%C%%") & call echo.%%Line%%))
Strg-a
und Strg-c
) kopieren ...Etwas übersichtlicher ließe sich das auch noch so schreiben:
@echo off & setlocal
set "Ein=D:\TEMP\Ausgang.csv"
set "Aus=D:\TEMP\Ausgabe.csv"
set "Ersetz=D:\TEMP\Ersetzen.txt"
>"%Aus%" (for /f "usebackq delims=" %%A in ("%Ein%") do ((set "Line=%%A") & (for /f "usebackq delims=" %%C in ("%Ersetz%") do call set "Line=%%Line:%%C%%") & call echo.%%Line%%))
bastla
Hallo Krebs62!
Vorzugsweise solltest Du einen Batch direkt in der CMD-Shell testen (siehe meine Darstellung oben) - dann bleibt das Fenster auch offen und Du kannst allfällige Fehlermeldungen lesen; alternativ dazu könntest Du noch eine Zeile
hinzufügen - dann wird das Fenster erst nach einem Tastendruck geschlossen ...
Besser ist es allerdings, per "
in den entsprechenden Ordner zu wechseln und dann die Batchdatei (ich hatte sie "ersetzen.cmd" genannt) zu starten. Du kannst so auch meine Demo durch die schrittweise Eingabe von
nachvollziehen ...
Grüße
bastla
Vorzugsweise solltest Du einen Batch direkt in der CMD-Shell testen (siehe meine Darstellung oben) - dann bleibt das Fenster auch offen und Du kannst allfällige Fehlermeldungen lesen; alternativ dazu könntest Du noch eine Zeile
pause
Besser ist es allerdings, per "
cmd
" eine Shell zu öffnen, dort mitcd /d "D:\TEMP"
type Ersetzen.cmd
type Ausgang.csv
Ersetzen
type Ausgabe.csv
Grüße
bastla