Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Doppelte durch einfache Hochkommas ersetzen (https://www.delphipraxis.net/202029-doppelte-durch-einfache-hochkommas-ersetzen.html)

Delbor 20. Sep 2019 10:48

Delphi-Version: 10.2 Tokyo

Doppelte durch einfache Hochkommas ersetzen
 
Hi zusammen
Von Workbench habe ich Scripts wie diese exportiert:
Delphi-Quellcode:
CREATE TABLE "PdfOfficerDB"."tblAuthor"("AuthorID" INTEGER PRIMARY KEY NOT NULL,
                                        "Name" VARCHAR(45) NOT NULL,
                                        "Vorname" VARCHAR(45) NOT NULL,
                                        "tblUser_idTblUser" INTEGER NOT NULL,
                                        CONSTRAINT "fk_tblAuthor_tblUser1"
                                          FOREIGN KEY("tblUser_idTblUser")
                                          REFERENCES "tblUser"("idTblUser"));
Und solches soll nun in sowas eingefügt werden:
Delphi-Quellcode:
function TDMLSQLiteOfficerFE.CreateTblFile: string;
  var SQLstring: String;
begin
  SQLstring := 'CREATE TABLE tblFile(FileID INTEGER PRIMARY KEY NOT NULL,'+
                                                     'FilePath" VARCHAR(100) NOT NULL,'+
                                                     'FileType" VARCHAR(5) NOT NULL,'+
                                                     'FileVersion" VARCHAR(3) NOT NULL,'+
                                                     'tblDocuments_DocuID" INTEGER NOT NULL,'+
                                                     'CONSTRAINT fk_tblFile_tblDocuments1'+
                                                       'FOREIGN KEY(tblDocuments_DocuID)'+
                                                       'REFERENCES tblDocuments(DocuID"))';
  Result := SQLString;
end;
Das heisst: einige der doppelten Hochkommas muss ich entfernen, andere durch einfache ersetzen sowie zusätzlich am Ende jeder Zeile den String abschliessen und, wenn der String in dernächsten Zeile fortgesetzt wird, ein + hinzufügen.
Ich hab das erstmal über Suchen und ersetzen versucht, aber da meckert Delphi:
Zitat:

[Content]
Suchbegriff '"' nicht gefunden

[OK]
Gebe ich nichts ein (was im Dialog sichtbar wird, kann zumindest bei mir auch als vier einzelne Hochkommas interpretiert werden), meckert Delphi:
Zitat:

[Content]
Der Suchtext darf nicht leer sein oder leer entsprechen.

[OK]
Versuche ich das mit dem Sync-Arbeitsmodus, kann ich zwar das erste Zeichen löschen, aber gleich danach wird der markierte Bereich aufgehoben.
Wie kriege ich die doppelten Hochkommas weg, ohne jedes einzeln entfernen zu müssen?

Gruss
Delbor

TigerLilly 20. Sep 2019 11:20

AW: Doppelte durch einfache Hochkommas ersetzen
 
Zuerst alle " entfernen, dann MultiPaste nutzen.

Delbor 20. Sep 2019 12:02

AW: Doppelte durch einfache Hochkommas ersetzen
 
TigerLilly
Zitat:

Zitat von TigerLilly (Beitrag 1447231)
Zuerst alle " entfernen, dann MultiPaste nutzen.

Das versteh ich jetzt nur halb - die " also von Hand entfernen, okay, das ist das eine. Aber multipaste? An jeder gewünschte Stelle <Ctrl&V>?
Aber Google ist doch ein schlaues Kerlchen....

Vielen Dank für deine Antwort!

Gruss
Delbor

PS: Ich habs jettzt auch mal mit Notepad++ versucht.
suchen : ",
ersetzen durch '.

Aus
Delphi-Quellcode:
CREATE TABLE "PdfOfficerDB"."tblOrt"("OrtID" INTEGER PRIMARY KEY NOT NULL,
                                     "Ort" VARCHAR(65),
                                     "PLZ" VARCHAR(6));
wurde
Delphi-Quellcode:
CREATE TABLE 'PdfOfficerDB"."tblOrt"("OrtID' INTEGER PRIMARY KEY NOT NULL,
                                     'Ort' VARCHAR(65),
                                     'PLZ' VARCHAR(6));
Ob da mit den beiden Möglichkeiten (Notepad++ oder Multipaste wirklich Zeit und Tipparbeit eingespart würde, bin ch mir nicht sicher. Das Ergebnis von Notepad++ sähe eventuell besser aus, wenn die nicht benötigten Tabellennamen vorher entfernt würden...

p80286 20. Sep 2019 12:31

AW: Doppelte durch einfache Hochkommas ersetzen
 
Ich hoffe das Beispiel
Delphi-Quellcode:
...
'FilePath" VARCHAR(100) NOT NULL,'+
'FileType" VARCHAR(5) NOT NULL,'+
'FileVersion" VARCHAR(3) NOT NULL,'+
'tblDocuments_DocuID" INTEGER NOT NULL,'+
...
war noch nicht fertig, das könnte doch in die Hose gehen!

Gruß
K-H

Delbor 20. Sep 2019 12:44

AW: Doppelte durch einfache Hochkommas ersetzen
 
Hi p80286
Zitat:

Zitat von p80286 (Beitrag 1447243)
Ich hoffe das Beispiel
Delphi-Quellcode:
...
'FilePath" VARCHAR(100) NOT NULL,'+
'FileType" VARCHAR(5) NOT NULL,'+
'FileVersion" VARCHAR(3) NOT NULL,'+
'tblDocuments_DocuID" INTEGER NOT NULL,'+
...
war noch nicht fertig, das könnte doch in die Hose gehen!

Gruß
K-H

Das sollte auch nur das Ergebnis in Notepad++ zeigen, das so natürlich nicht brauchbar ist. Es würde Nachbearbeitung nötig, und da stellt sich dann die Frage, ob damit irgendwas gegenüber der händischen Anpassung gewonnen wurde.

Effizienter würde das eventuell durch ein eigenes kleines Tool gelöst...

Gruss
Delbor

PS: Im Nachinein sehe ich: das war eines der Statements, die ich zuvor händisch angepasst habe - dabei gingen dann einige Sachen vergessen.

HolgerX 20. Sep 2019 13:24

AW: Doppelte durch einfache Hochkommas ersetzen
 
Hmmm..

Wenn ich das richtig sehe, soll aus:

Code:
CREATE TABLE "PdfOfficerDB"."tblAuthor"("AuthorID" INTEGER PRIMARY KEY NOT NULL,
                                        "Name" VARCHAR(45) NOT NULL,
                                        "Vorname" VARCHAR(45) NOT NULL,
                                        "tblUser_idTblUser" INTEGER NOT NULL,
                                        CONSTRAINT "fk_tblAuthor_tblUser1"
                                          FOREIGN KEY("tblUser_idTblUser")
                                          REFERENCES "tblUser"("idTblUser"));
folgendes werden:
Code:
'CREATE TABLE PdfOfficerDB.tblAuthor(AuthorID INTEGER PRIMARY KEY NOT NULL, '+
                                        'Name VARCHAR(45) NOT NULL, '+
                                        'Vorname VARCHAR(45) NOT NULL, '+
                                        'tblUser_idTblUser INTEGER NOT NULL, '+
                                        'CONSTRAINT fk_tblAuthor_tblUser1 '+
                                          'FOREIGN KEY(tblUser_idTblUser) '+
                                          'REFERENCES tblUser(idTblUser)); ';
Wenn das richtig ist, dann würde es z.B. so gehen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i : integer;
  sl : TStringList;
  l : integer;
begin
  sl := TStringList.Create;
  try
    // Alle " löschen
    sl.Text := Trim(StringReplace(Memo1.Text,'"','',[rfReplaceAll]));
    for i := 0 to sl.Count-1 do begin
      // Anzahl führende Leerzeichen ermitteln
      l := Length(sl[i]) - Length(Trim(sl[i]));
      // Führende Leerzeichen + in Anführungszeichen setzen (mit Trennleerzeichen je Zeilenende)
      sl[i] := StringOfChar(' ',l) + QuotedStr(Trim(sl[i])+ ' ');
      // '+' bei allen Zeilen, außer der letzten, anhängen
      if i < sl.Count-1 then
        sl[i] := sl[i] +'+'
      else
        // ';' bei letzter Zeilen anhängen
        sl[i] := sl[i] +';';
    end;
    Memo2.Text := sl.Text;
  finally
    sl.Free;
  end;
end;

Delbor 20. Sep 2019 13:52

AW: Doppelte durch einfache Hochkommas ersetzen
 
Hi HolgerX

Danke für dein Codeschnipsel!

Gruss
Delbor

Uwe Raabe 20. Sep 2019 14:27

AW: Doppelte durch einfache Hochkommas ersetzen
 
Wieso können eigentlich die doppelten Anführungszeichen nicht bleiben? Das sind doch nur gequotete Identifier und die sollten auch im Delphi-Code funktionieren.

Delbor 20. Sep 2019 14:39

AW: Doppelte durch einfache Hochkommas ersetzen
 
Hi Uwe Raabe

Zitat:

Zitat von Uwe Raabe (Beitrag 1447255)
Wieso können eigentlich die doppelten Anführungszeichen nicht bleiben? Das sind doch nur gequotete Identifier und die sollten auch im Delphi-Code funktionieren.

Ohne es jetzt wirklich zu wissen: Der SQLString dürfte doch letztlich vom DBMS verarbeitet werden, und nicht von Delphi. So zumindest kann ich mir das erklären.

Gruss
Delbor

Uwe Raabe 20. Sep 2019 14:49

AW: Doppelte durch einfache Hochkommas ersetzen
 
Zitat:

Zitat von Delbor (Beitrag 1447260)
Der SQLString dürfte doch letztlich vom DBMS verarbeitet werden, und nicht von Delphi. So zumindest kann ich mir das erklären.

Genau das wollte ich ja mit meinem Statement ausdrücken! Delphi ist es egal, ob du die SQL-Identifier quotest. Wenn der SQL-String in der Workbench so funktioniert, dann sollte er es auch aus dem Delphi-Code tun.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:49 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz