Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Bestimmte Zeilen aus der autom. Codeformatierung (Strg+D) ausschließen (https://www.delphipraxis.net/196169-bestimmte-zeilen-aus-der-autom-codeformatierung-strg-d-ausschliessen.html)

juergen 27. Apr 2018 19:55

Bestimmte Zeilen aus der autom. Codeformatierung (Strg+D) ausschließen
 
Hallo zusammen,

ich wende oft die autom. Formatierung des Codes über Strg+D von cnPack an.
Gibt es eigentlich die Möglichkeit mit irgendwelchen Steuerzeichen bestimmte Codeabschnitte aus der Codeformatierung auszuschließen?
Hintergrund:
Ich habe oft SQL Statements die ich im Code zusammenbastle. Die Formatierung soll diese Codeabschnitte *nicht* umformatieren, da das SQL Statement nach der Formatierung schlecht zu lesen ist.

Würde mich freuen wenn es dafür eine Lösung gäbe.

Vielen Dank schon mal vorab!

stahli 27. Apr 2018 20:01

AW: Bestimmte Zeilen aus der autom. Codeformatierung (Strg+D) ausschließen
 
Eine Lösung kenne ich nicht, aber kannst Du mal interessehalber etwas zeigen, wie das aussehen soll?
Ich könnte das evtl. mal für mein Tool mit verwerten.

juergen 27. Apr 2018 22:33

AW: Bestimmte Zeilen aus der autom. Codeformatierung (Strg+D) ausschließen
 
Hallo Stahli,

wenn ich ein SQL Statement formatiere sieht das stark vereinfacht in etwa so aus:

Delphi-Quellcode:
var
  lsUsrDatum : TDate;
begin
  lsUsrDatum :=........;

  qyr_Buchungen.SQL.Text := select 'Datum, Name, Vorname, PersNr, Abteilung, xxxxxxxxxxxxxxxxxxxxxxxxxx from Buchungen' + #13#10 +
  'where Datum > lsUsrDatum'
Ich hätte die Formatierung der Zeilen gern so wie ich diese im SQL Studio eingegeben habe:
Delphi-Quellcode:
var
  lsUsrDatum : TDate;
begin
  lsUsrDatum :=........;

  qyr_Buchungen.SQL.Text :=
  'select Datum,' + #13#10 + 
          'Name,' + #13#10 + 
          'Vorname,' + #13#10 + 
          'PersNr,' + #13#10 + 
          'Abteilung,' + #13#10 + 
          'xxxxxxxxxxxxxxxxxxxxxxxxxx ' + #13#10 +
  'from Buchungen ' + #13#10 +
  'where Datum > lsUsrDatum'
Wegen den ganzen ' + #13#10 + sieht das vermutlich ungewohnt aus. Aber das SQL erschließt sich zumindest mir um einiges besser. Größere Statements sind dann noch viel schlechter lesbar/ nachvollziehbar.

Delphi.Narium 27. Apr 2018 22:55

AW: Bestimmte Zeilen aus der autom. Codeformatierung (Strg+D) ausschließen
 
So?
Delphi-Quellcode:
var
  lsUsrDatum : TDate;
begin
  lsUsrDatum :=........;

  qyr_Buchungen.SQL.Clear;
  qyr_Buchungen.SQL.Add('select');
  qyr_Buchungen.SQL.Add(' Datum,');
  qyr_Buchungen.SQL.Add(' Name,');
  qyr_Buchungen.SQL.Add(' Vorname,');
  qyr_Buchungen.SQL.Add(' PersNr,');
  qyr_Buchungen.SQL.Add(' Abteilung,');
  qyr_Buchungen.SQL.Add(' xxxxxxxxxxxxxxxxxxxxxxxxxx ');
  qyr_Buchungen.SQL.Add('from Buchungen ');
  qyr_Buchungen.SQL.Add('where Datum > lsUsrDatum');
oder so?
Delphi-Quellcode:
  lsUsrDatum :=........;

  qyr_Buchungen.SQL.Text :=
  'select Datum,' + 
         'Name,' + 
         'Vorname,' + 
         'PersNr,' + 
         'Abteilung,' + 
         'xxxxxxxxxxxxxxxxxxxxxxxxxx ' + 
  'from Buchungen ' + 
  'where Datum > lsUsrDatum';
Auf die #13#10 kann man durchaus verzichten, solange aus dem "Rest" ein gültiges Statement wird. (Die Datenbank braucht für die Ausführung keine schöne Formatierung - sprich: wenn das SQL ohne die #13#10 zum Einzeiler wird.)

juergen 27. Apr 2018 23:07

AW: Bestimmte Zeilen aus der autom. Codeformatierung (Strg+D) ausschließen
 
So, ich habe nochmal genauer nachgeschaut und getestet. Ich nutze nun die integrierte Formatierung von Castalia und das Highlighting von cnPack. Die Formatierung von cnPack habe ich deaktiviert.
Bei den Castalia Optionen gibt es eine Option "Zeilenumbrüche des Benutzers beibehalten" (true/false). Ich habe das aktiviert.
Damit klappt alles wie ich es möchte! :-D

Allen ein schönes Wochenende!

juergen 27. Apr 2018 23:16

AW: Bestimmte Zeilen aus der autom. Codeformatierung (Strg+D) ausschließen
 
@Delphi.Narium,
danke für deine Hilfe!
Meine autom. Formatierung hatte alle Zeilen in einer Zeile umformatiert (bis zur eingestellten Breite). Das war doof.
Das konnte ich nun beheben, siehe meinen vorigen Post. Das cnPack-Highlighting habe ich noch aktiv, weil es für mich von Vorteil ist, dass das an der Maus stehende "Wort" alle anderen Vorkommen mit gelb anzeigt.

dummzeuch 28. Apr 2018 10:16

AW: Bestimmte Zeilen aus der autom. Codeformatierung (Strg+D) ausschließen
 
Der Code Formatter in GExperts erlaubt es, Bereiche von der Formatierung auszuschließen, indem man sie in bestimmte Kommentare einschließt. Standardmässig sind das {(*} bis {*)}.

himitsu 28. Apr 2018 11:58

AW: Bestimmte Zeilen aus der autom. Codeformatierung (Strg+D) ausschließen
 
Gerade bei dem Clear+Add würde ich doch mal über ein WITH nachdenken, auch wenn man es sonst meiden sollte.

Auch sollte/könnte man sich überlegen, ob man dort die Validierung ausschaltet?
Bei vielen SQL-Komponenten wird standardmäßg nach/bei jeder Äderung des SQL-Statements was mit dem SQL gemacht, wie z.B. Parameter suchen und die Parameter-Liste anpassen. Eventuell auch schon Pepared-Zeugs mit dem Statement.

Eine komplette "einmalige" Zuweisung könnte sich da angenehmer erweisen.

PS: bei solchen Multiline mache ich persönlich die + vorne hin, denn da sieht man gleich, dass es zusammen gehört
Delphi-Quellcode:
'abc',
'def'

'abc'
+ 'def'
Bezüglich #13#10, so wäre eigentlich ein sLineBreak besser, aber ich gebe zu, dass es mich im Codefluss etwas stört.
Außerdem wird bei der Zuweisung vieler StringListen der Zeilenumbruch intern angepasst, bzw. es wird sowieso zerlegt und "intern" Zeilenweise zugewiesen (hier aber mit Deaktivierung von dem obengenannten), womit es bei derZuweisung egal ist welchen Zeilenumbruch mann nimmt, also mach ich es mit da einfacher.

Und ob Zeilenumbruch nach letzter Zeile, das kann man sich auch überlegen. Also z.B. konsequent immer dran, falls man mal erweitern will und man es soch nicht vergisst.
Ich hab da aber eh immer ein
Delphi-Quellcode:
,
,
Delphi-Quellcode:
)
oder
Delphi-Quellcode:
;
ahinter, also ist die Zeile sowieso schon anders, also kann ich den #10 auch weglassen.

Delphi-Quellcode:
qyr_Buchungen.SQL.Text :=
  'select Datum, Name, Vorname, PersNr, Abteilung, ' + sLineBreak +
  'from Buchungen ' + sLineBreak +
  'where Datum > lsUsrDatum';

qyr_Buchungen.SQL.Text :=
    'select Datum, Name, Vorname, PersNr, Abteilung, ' + sLineBreak
  + 'from Buchungen ' + sLineBreak
  + 'where Datum > lsUsrDatum';

qyr_Buchungen.SQL.Text :=
    'select Datum, Name, Vorname, PersNr, Abteilung, ' + #13#10  // oder + #10
  + 'from Buchungen ' + #13#10
  + 'where Datum > lsUsrDatum';

// so mach ich es am Liebsten
qyr_Buchungen.SQL.Text :=
    'select Datum, Name, Vorname, PersNr, Abteilung, '#10
  + 'from Buchungen '#10
  + 'where Datum > lsUsrDatum';
Letztendlich ist alles Geschmackssache.

Aber was mit schon öfters gefehlt hat, ist ein Multiline-String.
Sei es durch offenlassen am Zeilenende, was ja aktuell verboten ist, aber das würde der Pascal-Syntax die wenigsten Probleme bereiten (PS, der Code-Highlighter im Forum kann es schon lange :lol:)
Oder durch sowas, wie z.B. Heredoc, was man aus PHP, SQL, Java/JavaScript uvm. kennt.

SQL-Code:
S = $$
  abc
  def
  xzz
$$;

S = $$abc
def
xyz$$;

S = $irgendas$abc
def mit $$ drin
xzz$irgendas$;

Uwe Raabe 28. Apr 2018 12:39

AW: Bestimmte Zeilen aus der autom. Codeformatierung (Strg+D) ausschließen
 
Seit einigen Delphi-Versionen kann man auch sowas schreiben. Das ist insbesondere dann übersichtlicher, wenn das SQL mit if-then-else und/oder Schleifen zusammengesetzt wird.
Delphi-Quellcode:
qyr_Buchungen.SQL.BeginUpdate;
qyr_Buchungen.SQL.Clear;
qyr_Buchungen.SQL.AddStrings([
  'select',
  ' Datum,',
  ' Name,',
  ' Vorname,',
  ' PersNr,',
  ' Abteilung,',
  ' xxxxxxxxxxxxxxxxxxxxxxxxxx ',
  'from Buchungen ',
  'where Datum > lsUsrDatum'
  ]);
qyr_Buchungen.SQL.EndUpdate;
Aber ich sehe gerade: es geht ja gar nicht um das Zusammensetzen der SQL-Befehle :oops:

Delphi.Narium 28. Apr 2018 18:00

AW: Bestimmte Zeilen aus der autom. Codeformatierung (Strg+D) ausschließen
 
Es geht um die Lesbarkeit und da find' ich Deinen Vorschlag schon sehr gut, bin nur noch nie auf die Idee gekommen, das zu probieren.

Die Frage ist jetzt halt, was macht der Code-Formatter daraus?


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 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