Notepad++ einzelnes Anführungszeichen ersetzen

cr0wfir3

Cadet 1st Year
Registriert
Sep. 2008
Beiträge
12
Hallo zusammen.

Wie man Anführungszeichen in Notepad++ sucht und ersetzt weiß ich, aber ich habe folgendes Problem:

Ich habe eine CSV-Datei mit Daten aus einer Datenbank. Die Spalten sind per Semikolon getrennt.

Hierzu ein einfaches Beispiel:

ID;Beschreibung
1;Der Inhalt:"hallo Leute"
2;Ich sage: "Es ist ein 42"-Widescreen"
3;56"-Widescreen
4;aus versehen ein" eingesetzt


Der erste Datensatz ist korrekt und die Anführungszeichen sollen genau so stehen bleiben.

Aber der 2te, 3te und 4te Datensatz bereiten mir Probleme. Ich muss die "allein stehenden" Anführungszeichen durch etwas anderes (Beispiel: ' ) ersetzen.

Ich kann nicht manuell nach einzelnen Anführungszeichen suchen und diese ersetzen, da die Datenbank mehr als 10.000 Einträge besitzt.
Von daher bin ich drauf angewiesen, ob Notepad++ (oder ein anderes Programm) diese einzelnen Zeichen finden und ersetzen kann.

LG
 
ich habe es in notepad++ noch nicht ausprobiert aber du kannst beim suchmodus "reguläre ausdrücke" auswählen
kannst dir mal dieses tutorial ansehen
 
Deshalb nimmt man für die deutschen Anführungszeichen „“ und das Einheitenzeichen für Zoll ". ;P Mehr als ASCII in einer Datenbank zu verwenden, hat manchmal seinen Vorteil.

Jetzt ist das Kind aber schon in den Brunnen gefallen. Den zweiten und dritten Datensatz kannst du mit einer Regex (mindestenz eine Zahl vor dem "-Zeichen) ersetzen. Beim vierten Datensatz weiß ich leider auch nicht weiter … oder kann man eine Regex basteln, die sich nur auf eine Zeile bezieht?
 
DeusoftheWired schrieb:
Deshalb nimmt man für die deutschen Anführungszeichen „“ und das Einheitenzeichen für Zoll ". ;P Mehr als ASCII in einer Datenbank zu verwenden, hat manchmal seinen Vorteil.

Jetzt ist das Kind aber schon in den Brunnen gefallen.
Ja Leider :(

DeusoftheWired schrieb:
Den zweiten und dritten Datensatz kannst du mit einer Regex (mindestenz eine Zahl vor dem "-Zeichen) ersetzen.
Wie würde das aussehen? Wenn ich das hätte, wäre mir eigentlich schon geholfen. Den 4ten Datensatz hab ich nur hinzugefügt, falls es auftreten sollte.

DeusoftheWired schrieb:
Beim vierten Datensatz weiß ich leider auch nicht weiter … oder kann man eine Regex basteln, die sich nur auf eine Zeile bezieht?
Das war auch meine Überlegung, aber hab leider keinen Ansatz wie :-/



dasbene schrieb:
ich habe es in notepad++ noch nicht ausprobiert aber du kannst beim suchmodus "reguläre ausdrücke" auswählen
kannst dir mal dieses tutorial ansehen

Danke für den Hinweis, aber ich blick da nicht durch :-(
 
kann man eine Regex basteln, die sich nur auf eine Zeile bezieht?
Sollte doch mithilfe der Zeilenumbrüche möglich sein. \n ist Linefeed und \r CarriageReturn.
 
Man kann mit regulären Ausdrücken zwar verschachtelte Paare finden, aber die Bewertung, ob das wirklich ein Paar ist, kann nur manuell erfolgen.
 
Mal was in der Richtung von
^[^"]*"[^"]$​
(Von Beginn an beliebig viele nicht", dann ein " und dann beliebig viele nicht"​ bis zum Zeilenende)
getestet? Das sollte alle Zeilen finden, welche nur ein " enthalten. Mglw. musst du den erweitern, falls du noch einzelne Spalten filtern willst.

Es ist auch möglich, alle Zeilen zu finden, welche eine ungerade Anzahl an " haben.

^(?:[^"]*"[^"]*")*[^"]*"[^"]*$​

EDIT: Gerade getestet:

^(?:[^"\r\n]*"[^"\r\n]*")*[^"\r\n]*"[^"\r\n]*
 
Zuletzt bearbeitet:
Hancock schrieb:
Mal was in der Richtung von
^[^"]*"[^"]$​
(Von Beginn an beliebig viele nicht", dann ein " und dann beliebig viele nicht"​ bis zum Zeilenende)
getestet? Das sollte alle Zeilen finden, welche nur ein " enthalten. Mglw. musst du den erweitern, falls du noch einzelne Spalten filtern willst.

Es ist auch möglich, alle Zeilen zu finden, welche eine ungerade Anzahl an " haben.

^(?:[^"]*"[^"]*")*[^"]*"[^"]*$​

EDIT: Gerade getestet:

^(?:[^"\r\n]*"[^"\r\n]*")*[^"\r\n]*"[^"\r\n]*

Der sagt mir die ganze Zeit: Can't find the text:"^(?:[^"\r\n]*"[^"\r\n]*")*[^"\r\n]*"[^"\r\n]*"

Hab ich das richtig ausgeführt?
STRG+F, dann auf den Reiter "Ersetzen" und bei "Suche nach" dein Code einfügen und im Suchmodus "Reguläre Ausdrücke" auswählen?
 
Ich seh grad, ein $ ist im zweiten Teil verloren gegangen

^(?:[^"\r\n]*"[^"\r\n]*")*[^"\r\n]*"[^"\r\n]*$

Mal ein Screenshot. (NPP v6.8.3)
 

Anhänge

  • npp.png
    npp.png
    18,8 KB · Aufrufe: 489
Es funktioniert.

Ich hatte eine sehr alte Version auf dem Rechner :lol:


Das sieht sehr gut aus und funktioniert auch in der richtigen Datei *happy*

VIIIEEELEN DANK !
Ergänzung ()

Noch eine Kleinigkeit ^^

Was gebe ich bei "Ersetzen durch" ein?

Hab grad mein gewünschtes ' eingesetzt, aber da hat er die ganze Zeile und nicht nur das Zeichen ersetzt xD
 
Das ist auch nicht so dringend nötig, hat sich nämlich rausgestellt, dass in dieser großen Datenbank, bis jetzt, nur ein "Fehler" gefunden wurde ^^ Das schaff ich auch manuell :D

Aber noch eine andere Frage.

Ich hab eine Bestimmte Anzahl an Spalten, die in der CSV per Semikolon getrennt sein sollten.

Ich würde nun gerne überprüfen lassen, ob die Anzahl der Semikolons, einer Zeile, einen Bestimmten Wert nicht überschreitet.

Wenn wir mein Beispiel ganz oben nehmen und es bisschen verändern, dürfte die Anzahl der Semikolons pro Zeile nicht größer als 1 sein.


Neues Beispiel: schrieb:
ID;Beschreibung
1;Der Inhalt:"hallo Leute"
2;Ich sage: "Es ist ein 42"-Widescreen"
3;56"-Widescreen
4;aus versehen ein; Semikolon eingesetzt
 
Dafür brauchst du kein Regex, da reicht simple Mathematik. Semikola werden in einer .csv auch dann gesetzt, wenn im entsprechenden „Feld“ nichts steht oder gar nichts vorhanden ist (NUL).

Zähle die Semikola mit dem Suchen-Dialog und teile diese Zahl durch die Anzahl der Zeilen. Ist es nicht ein Vielfaches von der Anzahl an Semikola in einer typischen Zeile, ist da mindestens eines zuviel.

Beispiel:
Code:
blau;1234;lol;Käse;Fahrrad
rot;293487;OMG;Brot;Auto
grün;1278;wtf;Apfel;Bu;s

Jede Zeile soll also typisch vier Semikola enthalten. Wir haben drei Zeilen, also sollten es 4 * 3 = 12 Semikola sein. Zählen wir die Anzahl der Semikola mit der Such-Funktion, finden wir aber 13 Stück. In der letzten Zeile sind es nämlich fünf statt vier. Wakarimasu ka? ;)
 
=D Das klingt logisch, aber was ist wenn ich gerne wissen würde in welcher Zeile sich das 5te Semikolon befindet? :evillol:

Bei drei Zeilen kein Problem :freaky: Bei über 10.000 schon :lol:

Das Problem bei meiner Datenbank ist, dass es mehrere Spalten für Beschreibungen gibt. Diese könnten unter Umständen, vom Inhalt her, auch ein Semikolon enthalten welches in der CSV für Probleme sorgen wird. Denn die danach folgenden Inhalte aus dieser einen Zeile, wären falschen Spalten zugeordnet.
Das würde ich gerne überprüfen.


Farbe; Zahl; Text1, Text2; Text3
grün;1278;wtf;Apfel;Bu;s

Bei dem Beispiel hätte das "s" keine Zuordnung zu einer Spalte oder wären dahinter mehr Spalten zur Verfügung, wäre es falsch zugeordnet und der Inhalt nach dem letzten Semikolon hätte wieder keine Zuordnung zu einer Spalte.
 
Hm … kannst du die Tabelle aus der Datenbank als etwas anderes als .csv exportieren? Oder beim Export auswählen, daß ein anderes Zeichen als das Semikolon als Trenner benutzt wird, was nicht in deinen Einträgen vorkommt?
 
Zuletzt bearbeitet:
Du kannst Semikolons zählen:
Code:
^(?:(?:[^;\r\n]*;){n,})|(?:[^;\r\n]*;){0,n-2})[^;\r\n]*$

n und n-2 durch die Anzahl der Spalten und AdS-2 ersetzten.

Und ja, dein Exportprogramm ist echt schlecht. Es macht quasi alle Fehler, die man mit CSV machen kann (fehlt nur noch ein Zeilenumbruch im Datenfeld).
 
Zurück
Oben