krebs62
Goto Top

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

Content-ID: 178725

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

Ausgedruckt am: 21.11.2024 um 21:11 Uhr

bastla
bastla 11.01.2012 um 12:08:37 Uhr
Goto Top
Hallo Krebs62 und willkommen im Forum!

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"
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:
findstr /g:"D:\Sonderzeichen.txt" "D:\Dateialt.csv">"D:\Dateineu.csv"
Grüße
bastla
Krebs62
Krebs62 11.01.2012 um 14:28:54 Uhr
Goto Top
Hallo bastla,

das funktioniert prima.

Als Sonderzeichen habe ich z.B.

ۤ
š
Ÿ
Š

Ist es mögliche diese Sonderzeichen in der Orginaldatei
mit dem richtigen Buchstaben zu ändern?

Danke

Gruß Krebs62
mathe172
mathe172 11.01.2012 um 16:18:05 Uhr
Goto Top
Hallo,

wenn du mir verrätst, was der richtige Buchstabe von § ist, dann ja.
Versuchs mal so:
Eine Ersetzen.txt:
š=s
Ÿ=Y
Š=S
Batch.bat:
@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
Krebs62
Krebs62 11.01.2012 um 20:34:51 Uhr
Goto Top
Hallo Mathe172,

vielen Dank für die Antwort.
Leider funktioniert der Batch nicht.

Hier die Sonderzeichen und die richtigen Buchstaben

†=Ü
€=Ä

Gruß Krebs62
mathe172
mathe172 11.01.2012 um 20:54:17 Uhr
Goto Top
Hallo,

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
bastla
bastla 11.01.2012 um 21:26:18 Uhr
Goto Top
Hallo Krebs62 und mathe172!

Grundsätzlich funktioniert mathes Ansatz - Ausnahme: Leerzeilen, aber die haben in einer CSV ohnehin nix verloren face-wink - 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%%))  
Grüße
bastla
Krebs62
Krebs62 11.01.2012 um 21:40:04 Uhr
Goto Top
Hallo,

leider passiert nichts.
Im CMD-Fenster kommt folgende Meldung:
"%%A" kann syntaktisch an dieser Stelle nicht verarbeitet werden.

Der Befehl "tokens" ist entwerder falsch geschrieben oder
konnte nicht gefunden werden.

Gruß Krebs62
bastla
bastla 11.01.2012 um 21:45:36 Uhr
Goto Top
Hallo Krebs62!

Nur zur Sicherheit: Auch wenn's nur knapp mehr als eine Zeile ist, ist das ein Batch (zu erkennen an %%A anstatt %A) und nicht zur Direkteingabe gedacht ...

Grüße
bastla
Krebs62
Krebs62 11.01.2012 um 22:21:22 Uhr
Goto Top
Hallo bastla,

dein Script erstellt eine Datei. Es erscheint in
der Datei %Line:%C% statt den Daten in der
Orginaldatei.

Gruß Krebs62
bastla
bastla 11.01.2012 um 22:24:30 Uhr
Goto Top
Hallo Krebs62!

Poste doch bitte einmal ein Stück der Originaldatei ...

Grüße
bastla
Krebs62
Krebs62 11.01.2012 um 22:30:51 Uhr
Goto Top
Hallo bastla,

hier ein Stück der Originaldatei:

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

Gruß Krebs62
bastla
bastla 11.01.2012 um 22:39:54 Uhr
Goto Top
Hallo Krebs62!

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>
Die "Ausgabe.csv" in "notepad.exe" (daher ANSI-codiert):
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
Das Ganze unter Verwendung der folgenden "Ersetzen.txt" (ebenfalls per "notepad.exe" angezeigt):
†=Ü
€=Ä
§=Ö
š=s
Ÿ=Y
Š=S
Grüße
bastla
Krebs62
Krebs62 11.01.2012 um 22:50:11 Uhr
Goto Top
Hallo bastla,

leider funktioniert es nicht bei mir.
Ich habe den Befehl für die Batchdatei kopiert und
eine neu Batchdatei erstellt. Dann habe ich
meine Datei den gleichen Namen gegeben wie du.
Wenn ich die Batchdatei ausführe passiert
nichts.

Woran kann das noch liegen?

Gruß Krebs62
bastla
bastla 11.01.2012 um 22:55:11 Uhr
Goto Top
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:
@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%%))  
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 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%%))  
Grüße
bastla
Krebs62
Krebs62 11.01.2012 um 23:04:58 Uhr
Goto Top
Hallo bastla,

eine dumme Frage.
Wie wird das mit dem Quelltext-Link gemacht.

Gruß Krebs62
bastla
bastla 11.01.2012 um 23:06:57 Uhr
Goto Top
Hallo Krebs62!

In der Zeile mit dem dünkleren Hintergrund (gleich oberhalb der Zeile "01." des Listings) findest Du rechts die Links "Quelltext | In den Speicher kopieren | drucken" ...

Grüße
bastla
Krebs62
Krebs62 11.01.2012 um 23:11:40 Uhr
Goto Top
Hallo bastla,

leider funktioniert es nicht.
Es kommt kurz ein schwarzes Fenster und dann ist Schluß.

Die Datei Ausgabe.csv wird nicht erstellt.

Gruß Krebs62
bastla
bastla 11.01.2012 um 23:15:51 Uhr
Goto Top
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
pause
hinzufügen - dann wird das Fenster erst nach einem Tastendruck geschlossen ...

Besser ist es allerdings, per "cmd" eine Shell zu öffnen, dort mit
cd /d "D:\TEMP"
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
type Ersetzen.cmd
type Ausgang.csv
Ersetzen
type Ausgabe.csv
nachvollziehen ...

Grüße
bastla
Krebs62
Krebs62 11.01.2012 um 23:28:15 Uhr
Goto Top
Hallo bastla,

herzlichen Dank für Deine Mühe.

Es funktioniert so wie ich es wollte. Super

Danke

Gruß Krebs62
bastla
bastla 11.01.2012 um 23:30:36 Uhr
Goto Top
Hallo Krebs62!

Freut mich, wenn's passt face-smile - wobei allerdings mathe172 den Batch geliefert hat ...

Grüße
bastla