AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Wie am besten einen Suchindex erstellen
Thema durchsuchen
Ansicht
Themen-Optionen

Wie am besten einen Suchindex erstellen

Ein Thema von LWChris · begonnen am 3. Jan 2011 · letzter Beitrag vom 6. Jan 2011
Antwort Antwort
Benutzerbild von LWChris
LWChris

Registriert seit: 27. Jul 2010
Ort: Erkelenz
22 Beiträge
 
Turbo Delphi für Win32
 
#1

Wie am besten einen Suchindex erstellen

  Alt 3. Jan 2011, 23:52
Datenbank: Das ist die Frage • Version: - • Zugriff über: Auch die Frage
Hallo,

ich wollte ein Programm schreiben, mit dem man eine große Menge php-Dateien nach Kriterien wie vorkommende Funktionsnamen oder Variablennamen durchsuchen kann. Damit ich nicht immer alle Dateien auf der ganzen Festplatte durchrödeln muss, halte ich einen Suchindex für sinnvoll. Die Datei, in der ich das speichere, ist ja im Prinzip eine Datenbank mit Items von diesem Typ:

Delphi-Quellcode:
TPHPFile = class
private
  FFileName: String;
  FVars: array of String;
  ...
public
  constructor Create(FileName: String);
  function HasVar(VarName: String): Boolean;
  ...
  property FileName read FFileName;
  ...
end;
Haltet ihr es sinnvoll, das so zu speichern, also in einem "File of TPHPFile"? Oder würde dann eine Suche in meinem Suchindex mit 1000+ Objekten vom Typ TPHPFile Jahre dauern?

Wenn ihr mir zu einer richtigen Datenbank ratet, sei erwähnt, dass ich schon ausreichend SQL beherrsche, aber keine Ahnung davon habe, wie man mit Delphi Datenbanken anlegt, verwaltet oder durchsucht.

Könnt ihr mir 'nen Tipp geben?

Danke, Chris

P.S.: Kann ich in Turbo Delphi 2006 (also Delphi 10) irgendwie an ShellTreeView kommen? Ich würde TDirectoryListBox verwenden, aber da das deprecated ist und lt. Google und Forum ShellTreeView die neue Komponente dafür ist, frag ich mich, ob ich jetzt eine Version habe, wo die ListBox veraltet aber die ShellTreeView noch nicht dabei ist?

Edit:
Achso, den Ordner habe ich, aber wie komme ich jetzt an die VCL-Kompente?
Chris
Software: schnell, effektiv, günstig. Wähle zwei.

Geändert von LWChris ( 4. Jan 2011 um 00:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: Wie am besten einen Suchindex erstellen

  Alt 4. Jan 2011, 01:18
Schau dir vielleicht mal in der IniFiles-Unit die Klasse THashedStringList an. Damit umgehst du dieses array of String und deine Suche innerhalb dieser Klasse würde recht effizient werden.

Bzgl der Komponente: Eigentlich heißt es pro Frage einen Thread. Schau dir aber mal pas-Dateien an und binde die in der uses-Klausel ein, in der die passenden Klassen liegen. Dann kannst du beim OnCreate die entsprechenden Komponenten erzeugen und die FormX als Parent setzen.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von LWChris
LWChris

Registriert seit: 27. Jul 2010
Ort: Erkelenz
22 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: Wie am besten einen Suchindex erstellen

  Alt 4. Jan 2011, 01:53
Schau dir vielleicht mal in der IniFiles-Unit die Klasse THashedStringList an. Damit umgehst du dieses array of String und deine Suche innerhalb dieser Klasse würde recht effizient werden.
Okay, hab ich. Ich versteh nicht, wieso es funktioniert, aber das ist ja nicht so schlimm. Also würdest du mir tatsächlich zu einem Suchindex als Datei mit eigenen Einträgen raten?

Eigentlich heißt es pro Frage einen Thread.
Tut mir leid, aber ich wollte nicht so viele Threads aufmachen, weil ich mir dann immer so doof vorkomme. 100 aufmachen aber nie die Lösung wissen. Alle Fragen, dich beantworten kann in DP sind immer schon beantwortet wenn ich sie entdecke (ich guck immer mal so in die Foren). Naja, danke Ich habs versucht aber ich seh die Komponente nicht. Bin wohl zu blöd dafür
Chris
Software: schnell, effektiv, günstig. Wähle zwei.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

AW: Wie am besten einen Suchindex erstellen

  Alt 4. Jan 2011, 01:59
Die Komponente siehst du dann erst zur Laufzeit des Programms. Die Turbo-Edition ist so gestrickt, dass man keinerlei Komponenten in die IDE installieren kann. Daher musst du alles via Code machen. Wobei ich gehört haben soll, dass es da einen Trick gibt. Kann dir da aber leider nicht weiterhelfen.

Zu deinem Problem: THashedStringList nutze ich wenn ich quick'n'dirty eine gehashte Liste brauche, was für eine Suche sehr gut ist. Man kann diese nutzen, oder auch eine Datenbank. Wollte dir nur eine dateibasierte Lösung zeigen, mit der man sowas auch implementieren kann. Oder du nutzt evtl. doch eine Datenbank, wobei das insgesamt auf die Verwendung der Daten ankommt.

Was genau machst du mit dem Programm? Ändern sich die Daten von "außerhalb" (andere Tools)? Denn dann wäre eine ständige Überwachung oder Neuindexierung notwendig.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von LWChris
LWChris

Registriert seit: 27. Jul 2010
Ort: Erkelenz
22 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: Wie am besten einen Suchindex erstellen

  Alt 4. Jan 2011, 02:21
Die Komponente siehst du dann erst zur Laufzeit des Programms.
Leider nicht, das ist ja das Problem Habs erzeugt und dann Top, Left, Width und Height gesetzt, aber ich seh nix^^

Habe aber gerade gesehen, dass ich mich vertan habe. FileCtrl ist gar nicht deprecated sondern Plattformspezifisch. Soll aber ohnehin nur unter Windows laufen (wird ja eine exe, es geht mir ja nicht um die .pas Datei), ist es also demnach egal, dass ich das verwende, richtig?

Was genau machst du mit dem Programm? Ändern sich die Daten von "außerhalb" (andere Tools)? Denn dann wäre eine ständige Überwachung oder Neuindexierung notwendig.
Ja, die Daten ändern sich von außerhalb, aber meist nur minimal. Wirklich grundlegende Änderungen sind nicht sehr häufig. Eine veraltete Indizierung (Indexierung?) wäre aber nicht so schlimm, meines Wissens nach, denn der Abnehmer meines Programms wäre schonmal froh, wenn er auf der Suche nach den Dateien die Auswahl schneller eingrenzen kann. Da macht es nichts, wenn da noch eine Datei auftaucht, die mittlerweile keine Variable dieses Namens mehr enthält. Kannst du dir in etwa so vorstellen: ein großes Lager von php-Dateien, in denen viele Menschen rumwuseln und laufen irgendwelchen Code optimieren, wie er selber auch. Allerdings muss er eben von Zeit zu Zeit nachsehen, wie eine Funktion arbeitet oder ob es Funktionen gibt, die er bei seinen Aufgaben verwenden kann, oder ob er selber eine schreiben muss. Bspw sucht er nach einer Funktion "UpperCase" und muss dann wissen, in welcher php-Datei die drin ist. So stelle ich mir das, was er mir beschrieb, vor.

Danke für die Hilfe
Chris
Software: schnell, effektiv, günstig. Wähle zwei.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#6

AW: Wie am besten einen Suchindex erstellen

  Alt 4. Jan 2011, 04:09
Zu deinem Komponenten-Thema: neuen Thread aufmachen!

Naja, wenn eine gute Dokumentation vorhanden ist, dann macht doch einfach ein Wiki draus? Oder eben eine andere Dokumentation, in der man sich bewegen und suchen kann.

Alternativ würde ich an der Stelle fast eine DB-Vorschlagen, da diese wesentlich mächtiger ist als die genannte THashedStringList. SQLite oder Firebird Embedded wären hier ein Anfang. Im Forum findest du massig Threads zu diesen beiden DBMS.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von LWChris
LWChris

Registriert seit: 27. Jul 2010
Ort: Erkelenz
22 Beiträge
 
Turbo Delphi für Win32
 
#7

AW: Wie am besten einen Suchindex erstellen

  Alt 5. Jan 2011, 06:17
Ich hab mir die IniFiles-Unit mal ganz zu Herzen genommen und erstelle meinen Index jetzt als TIniFile:

Code:
[C:\Program Files\xampp\htdocs\index.php]
IndexDate=2011/01/05
IndexTime=05:33:09:623
Variables=title,parsed,ucnext,letter
Functions=firstLetterUpperCase
Die 4 Abschnitte kann ich dann schön einfach wieder auslesen. Zur Programminternen Organisation nehme ich dann tatsächlich HashedStringLists, da ich beim Parsen ja immer überprüfen muss, ob das nicht schon drin ist (Duplicates:=dupIgnore funktioniert irgendwie nicht ). Mit der Eigenschaft DelimitedText kann ich dann wunderbar die Werte einlesen und ausgeben für die Anzeige

Dank guter Vorarbeit für meinen Parser, der die php-Dateien nach den Variablen und Funktionen durchkämmt, braucht die Indizierung von 5000 Zeichen Quelltext keine 5ms. Das dürfte für die Geschwindigkeit ausreichen

Danke für die Hilfe!

P.S.: Ich hab mich ja bisher immer im IniFiles drumherum gedrückt, aber irgendwie bin ich jetzt Fan davon. Der Code sah schwierig aus als ich ihn mir zum ersten Mal ansah, aber jetzt, wo ich erfahrener bin und die Anwendungen komplexer werden bin ich über diese Erleichterung dankbar
Chris
Software: schnell, effektiv, günstig. Wähle zwei.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

AW: Wie am besten einen Suchindex erstellen

  Alt 5. Jan 2011, 07:40
Alternative: Ein ordentliche RDBMS mit Volltextsuche.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#9

AW: Wie am besten einen Suchindex erstellen

  Alt 5. Jan 2011, 09:13
Duplicates:=dupIgnore funktioniert irgendwie nicht
Ich weiß nicht, wie es bei der HashedStringlist ist, aber bei der "normalen" Stringlist funktioniert das auch nur in Verbindung mit Sorted := true.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von LWChris
LWChris

Registriert seit: 27. Jul 2010
Ort: Erkelenz
22 Beiträge
 
Turbo Delphi für Win32
 
#10

AW: Wie am besten einen Suchindex erstellen

  Alt 6. Jan 2011, 08:07
Duplicates:=dupIgnore funktioniert irgendwie nicht
Ich weiß nicht, wie es bei der HashedStringlist ist, aber bei der "normalen" Stringlist funktioniert das auch nur in Verbindung mit Sorted := true.
Ach Mist, ich wusste mal, dass man das machen muss. Habs aber wieder vergessen Danke
Chris
Software: schnell, effektiv, günstig. Wähle zwei.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:20 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