Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Sonderzeichen auf csv Datei auslesen und in neuer Datei abspeichern

Frage Entwicklung Batch & Shell

Mitglied: Krebs62

Krebs62 (Level 1) - Jetzt verbinden

11.01.2012 um 11:48 Uhr, 6160 Aufrufe, 20 Kommentare, 1 Danke

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
Mitglied: bastla
11.01.2012 um 12:08 Uhr
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:
01.
Ä 
02.
ä 
03.
Ö 
04.
ö 
05.
Ü 
06.
ü 
07.
ß
erstellen und es dann so versuchen:
findstr /g:"D:\Sonderzeichen.txt" "D:\Dateialt.csv">"D:\Dateineu.csv"
Grüße
bastla
Bitte warten ..
Mitglied: Krebs62
11.01.2012 um 14:28 Uhr
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
Bitte warten ..
Mitglied: mathe172
11.01.2012 um 16:18 Uhr
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:
01.
@echo off 
02.
>"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
Mit freundlichen Grüßen,
Mathe172
Bitte warten ..
Mitglied: Krebs62
11.01.2012 um 20:34 Uhr
Hallo Mathe172,

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

Hier die Sonderzeichen und die richtigen Buchstaben

†=Ü
€=Ä

Gruß Krebs62
Bitte warten ..
Mitglied: mathe172
11.01.2012 um 20:54 Uhr
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.

Mit freundlichen Grüßen,
Mathe172
Bitte warten ..
Mitglied: bastla
11.01.2012 um 21:26 Uhr
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:
01.
@echo off & setlocal 
02.
>"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
Bitte warten ..
Mitglied: Krebs62
11.01.2012 um 21:40 Uhr
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
Bitte warten ..
Mitglied: bastla
11.01.2012 um 21:45 Uhr
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
Bitte warten ..
Mitglied: Krebs62
11.01.2012 um 22:21 Uhr
Hallo bastla,

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

Gruß Krebs62
Bitte warten ..
Mitglied: bastla
11.01.2012 um 22:24 Uhr
Hallo Krebs62!

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

Grüße
bastla
Bitte warten ..
Mitglied: Krebs62
11.01.2012 um 22:30 Uhr
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
Bitte warten ..
Mitglied: bastla
11.01.2012 um 22:39 Uhr
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
Bitte warten ..
Mitglied: Krebs62
11.01.2012 um 22:50 Uhr
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
Bitte warten ..
Mitglied: bastla
11.01.2012 um 22:55 Uhr
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:
01.
@echo off & setlocal 
02.
>"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:
01.
@echo off & setlocal 
02.
set "Ein=D:\TEMP\Ausgang.csv" 
03.
set "Aus=D:\TEMP\Ausgabe.csv" 
04.
set "Ersetz=D:\TEMP\Ersetzen.txt" 
05.
>"%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
Bitte warten ..
Mitglied: Krebs62
11.01.2012 um 23:04 Uhr
Hallo bastla,

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

Gruß Krebs62
Bitte warten ..
Mitglied: bastla
11.01.2012 um 23:06 Uhr
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
Bitte warten ..
Mitglied: Krebs62
11.01.2012 um 23:11 Uhr
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
Bitte warten ..
Mitglied: bastla
11.01.2012 um 23:15 Uhr
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
01.
type Ersetzen.cmd 
02.
type Ausgang.csv 
03.
Ersetzen 
04.
type Ausgabe.csv
nachvollziehen ...

Grüße
bastla
Bitte warten ..
Mitglied: Krebs62
11.01.2012 um 23:28 Uhr
Hallo bastla,

herzlichen Dank für Deine Mühe.

Es funktioniert so wie ich es wollte. Super

Danke

Gruß Krebs62
Bitte warten ..
Mitglied: bastla
11.01.2012 um 23:30 Uhr
Hallo Krebs62!

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

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
VB for Applications
Bestimmte Daten aus eine CSV-Datei in eine Excel-Tabelle importieren (2)

Frage von MariaElena zum Thema VB for Applications ...

Batch & Shell
gelöst PS Werte CSV-Datei in AD Attribut (3)

Frage von lupolo zum Thema Batch & Shell ...

Batch & Shell
Mehrere AD Benutzer aus CSV Datei mit PowerShell erstellen (1)

Frage von windelterrorist zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...