Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Suche mittels Grep in DFM-Dateien ergibt mitunter "false negative" (https://www.delphipraxis.net/180959-suche-mittels-grep-dfm-dateien-ergibt-mitunter-false-negative.html)

mjustin 3. Jul 2014 11:14

Suche mittels Grep in DFM-Dateien ergibt mitunter "false negative"
 
Vor dem Löschen von potentiell unbenutzten Datenbankobjekten schaue ich mittels GExperts Grep zuerst nach, ob dieses Objekt tatsächlich an keiner Stelle im Anwendungscode oder Tests mehr verwendet wird.

Leider ist (zumindest in Delphi 2009 noch) die Textform der DFMs nicht immer "grep-bar", weil lange Textzeilen mitten im Bezeichner umbrochen werden. Beispiel:

Delphi-Quellcode:
object qryBeispielDataSet: TSimpleDataSet
    ...
    DataSet.CommandText =
      'select tabellen_id, feldname1, feldname2'#13#10'from view_na' +
      'me'#13#10'where bedingung'
    ...
  end
Eine grep-Suche nach Datenbankobjekt 'view_name' liefert daher keinen Treffer. Das ist aus Sicht von grep auch völlig korrekt so ;)
Wird in neueren Delphi Versionen auch noch so in Text-DFMs umbrochen?

Dejan Vu 3. Jul 2014 11:22

AW: Suche mittels Grep in DFM-Dateien ergibt mitunter "false negative"
 
Schreib Dir doch ein eigenes DFM-GREP, oder konvertiere die DFM vor dem Greppen.

himitsu 3. Jul 2014 11:53

AW: Suche mittels Grep in DFM-Dateien ergibt mitunter "false negative"
 
Oder du lässt deine DFMs binär speichern .... da wird nichts umgebrochen. :stupid:

Sherlock 3. Jul 2014 12:37

AW: Suche mittels Grep in DFM-Dateien ergibt mitunter "false negative"
 
Du könntest auch versuchen reguläre Ausdrücke bei der Suche zu verwenden. Genau für solche Fälle sind sie ja da.

Sherlock

Namenloser 3. Jul 2014 14:18

AW: Suche mittels Grep in DFM-Dateien ergibt mitunter "false negative"
 
Zitat:

Zitat von Sherlock (Beitrag 1264266)
Du könntest auch versuchen reguläre Ausdrücke bei der Suche zu verwenden. Genau für solche Fälle sind sie ja da.

Sherlock

Wobei das schon etwas hässlich wird, wenn man davon ausgehen muss, dass nach jedem Zeichen ein Umbruch sein könnte.

Sherlock 3. Jul 2014 14:55

AW: Suche mittels Grep in DFM-Dateien ergibt mitunter "false negative"
 
Wohl wahr :D
Ich bin nur froh, daß nicht nach einem Beispiel für so einen Audruck gefragt wurde. Ich würde einfach zwei bis dreimal leicht variiert suchen, und dann davon ausgehen, daß es schon schief gehen wird. Um ganz sicher zu gehen, würde ich die DB auch einfach so lassen wie sie ist. ;)

Sherlock

himitsu 3. Jul 2014 16:29

AW: Suche mittels Grep in DFM-Dateien ergibt mitunter "false negative"
 
Mist, dachte schon, man könne die Zeilenlänge irgendwo ändern, aber das ist hart einprogrammiert.

Du hättest das dann ja nur eine andere Maximallänge (möglichst groß) für ObjectResourceToText definieren brauchen
und schon gäbe es zukünftig keine Zeilenumbrüche mehr.

Delphi-Quellcode:
procedure ObjectBinaryToText(Input, Output: TStream);
  procedure ConvertValue;
  const
    LineLength = 64;

Dejan Vu 3. Jul 2014 18:50

AW: Suche mittels Grep in DFM-Dateien ergibt mitunter "false negative"
 
Was hält dich eigentlich davon ab, ein \'+\r\n\s*\' per RegEx einfach zu eliminieren?

mjustin 5. Jul 2014 07:41

AW: Suche mittels Grep in DFM-Dateien ergibt mitunter "false negative"
 
Zitat:

Zitat von Dejan Vu (Beitrag 1264343)
Was hält dich eigentlich davon ab, ein \'+\r\n\s*\' per RegEx einfach zu eliminieren?

Wenn "eliminieren" bedeutet "aus den Dateien zu entfernen": ja, eine zweistufige Verarbeitung - erst alle diese Umbrüche aus den Dateien zu löschen und dann die Suche durchführen, scheint die einzige Lösung zu sein.

Als Erweiterung für GExperts oder cnPack wäre das ganz nett. (Update: einen Feature-Vorschlag bei GEXpert.org habe ich eingereicht).

Dejan Vu 5. Jul 2014 08:02

AW: Suche mittels Grep in DFM-Dateien ergibt mitunter "false negative"
 
Check mal SED for Windows. Mit PowerScript geht das auch

Dalai 5. Jul 2014 13:39

AW: Suche mittels Grep in DFM-Dateien ergibt mitunter "false negative"
 
AFAIK arbeitet sed nur zeilenweise. Außerdem sind wir doch hier in einem Delphi-Forum ;).

MfG Dalai

mjustin 5. Jul 2014 13:49

AW: Suche mittels Grep in DFM-Dateien ergibt mitunter "false negative"
 
Zitat:

Zitat von Dalai (Beitrag 1264543)
AFAIK arbeitet sed nur zeilenweise.

Ja - und das richtige Tool wäre damit eigentlich tr...

sed: How can I replace a newline (\n)?

BUG 5. Jul 2014 15:29

AW: Suche mittels Grep in DFM-Dateien ergibt mitunter "false negative"
 
Zitat:

Zitat von Dalai (Beitrag 1264543)
Außerdem sind wir doch hier in einem Delphi-Forum ;)

Gerade Delphi-Entwickler wollen doch nicht das RAD neu erfinden :mrgreen: Ok, schlechtes Wortspiel ...

Ich merke es zur Zeit wieder deutlich, wie mächtig die Unix-Philosophie ist, wenn man sich ein bisschen mit den Tools beschäftigt (man-Pages + Google).
grep, awk, xargs, wc ... wer einmal davon gekostet hat, will nie mehr zurück.

Dejan Vu 5. Jul 2014 15:43

AW: Suche mittels Grep in DFM-Dateien ergibt mitunter "false negative"
 
Zitat:

Zitat von mjustin (Beitrag 1264544)
Zitat:

Zitat von Dalai (Beitrag 1264543)
AFAIK arbeitet sed nur zeilenweise.

Ja - und das richtige Tool wäre damit eigentlich tr...

sed: How can I replace a newline (\n)?

Äh, nö. Geht auch ohne. SED schmeißt das \n ja weg, also brauchen wir 'N' (zum zusammenbepseln von zwei Zeilen) und das Pattern \'\+\s*\' (ob das jetzt SED-Syntax ist, weiß ich nicht).
Zitat:

Zitat von SED Manual
To match a block of two or more lines, there are 3 basic choices:
(1) use the 'N' command to add the Next line to the pattern space;
(2) use the 'H' command at least twice to append the current line to the Hold space, and then retrieve the lines from the hold space with x, g, or G; or
(3) use address ranges (see section 3.3, above) to match lines between two specified addresses.


mjustin 15. Jul 2014 20:14

AW: Suche mittels Grep in DFM-Dateien ergibt mitunter "false negative"
 
Erik Berry, einer der GExpert Entwickler, hat mir vor ein paar Tagen geantwortet: den Vorschlag, bei der Grep Suche den störenden Zeilenumbruch mitten im Stringkonstanten (und daher evtl. auch mitten in Bezeichnern von DB-Objekten) zu entfernen, wurde in der Vergangenheit bereits erwogen.

Leider gibt es aktuell für die GExpert Entwicklung keine Resourcen - so dass man sich vorerst mit anderen Werkzeugen behelfen muß.

p.s. Wie sieht es mit cnWizards aus, ist dort eine Grep Suche inklusive DFM enthalten?


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:19 Uhr.

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