![]() |
Datenbank: Das ist die Frage • Version: - • Zugriff über: Auch die Frage
Wie am besten einen Suchindex erstellen
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:
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?
TPHPFile = class
private FFileName: String; FVars: array of String; ... public constructor Create(FileName: String); function HasVar(VarName: String): Boolean; ... property FileName read FFileName; ... end; 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? :oops: 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? :) |
AW: Wie am besten einen Suchindex erstellen
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. |
AW: Wie am besten einen Suchindex erstellen
Zitat:
Zitat:
|
AW: Wie am besten einen Suchindex erstellen
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. |
AW: Wie am besten einen Suchindex erstellen
Zitat:
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? :?: Zitat:
Danke für die Hilfe :thumb: |
AW: Wie am besten einen Suchindex erstellen
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. |
AW: Wie am besten einen Suchindex erstellen
Ich hab mir die IniFiles-Unit mal ganz zu Herzen genommen und erstelle meinen Index jetzt als TIniFile:
Code:
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 :)
[C:\Program Files\xampp\htdocs\index.php]
IndexDate=2011/01/05 IndexTime=05:33:09:623 Variables=title,parsed,ucnext,letter Functions=firstLetterUpperCase 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 :D Danke für die Hilfe! :thumb: 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 :D |
AW: Wie am besten einen Suchindex erstellen
Alternative: Ein ordentliche RDBMS mit Volltextsuche.
|
AW: Wie am besten einen Suchindex erstellen
Zitat:
|
AW: Wie am besten einen Suchindex erstellen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz