Stringsuche mit Wildcards im Gridfeld
-
Hallo,
Stehe vor einem (für mich sehr) komplexen Problem:
Bis jetzt habe ich:
Ein Gridfeld in dem Name und Vorname enthalten sind. Nun soll ich eine Suchfunktion entwickeln die mir in dem Vor- und Nachnamen nach den eingegebenen Suchmustern die Ergebnisse wieder im Gridfeld anzeigt.
Ich habe mittlerweile eine Shellsortfunktion entwickelt bzw. implementiert die direkt mit dem Gridfeld arbeitet ohne zuerst alles groß in Arrays zu schreiben.
Mögliche Suchmuster:<b Alles was größer b ist
c Alles was kleiner c ist
m* Alles was mit m anfängt
*m* Alles was m enthält
*m alles was mit m endet!Ich habe ehrlich gesagt nicht wirklich eine Idee wie ich das Umsetzen kann. Wäre wirklich sehr sehr dankbar für eure Hilfe.
Gruß Marcap
-
Hallo
Ich habe mittlerweile eine Shellsortfunktion entwickelt bzw. implementiert
Was denn nun, hast du nun deine Suche schon fertig oder weißt du nicht wie du sie umsetzen sollst?
Was ist dein genaues Problem? Du must schon präziße Probleme beschreibenen und Fragen stellen, sonst bekommst du auch nur ganz allgemeine Antworten.Meine allgemeine Antwort ist:
Da das in Prinzip eine Datenbank ist, empfehle ich dir statt Hausgemachtem besser eine richtige Datenbank zu nehmen, wie Firebird. Dort bekommst du mit SQl solche Suchabfragen schnell und einfach hin.bis bald
akari
-
Hallo,
Ich habe die Suchfunktion noch nicht fertig, bzw. habe keine Ahnung wie ich das Umsetzen soll. Die Shellsortfunktion ist nur zum Sortieren nach dem Shell Sort Algoryhtmus. Ich kann keine Datenbank nehmen, da es vorgegeben ist das mit einer Textdatei zu machen, diese wird nun eben in ein Gridfeld geschrieben!
Vielen dank für eure Hilfe im vorraus!
-
Hallo
Du must für die Abfrage eben doch die Daten in ein Array speichern. Grund : Bei einer Abfrage wird ja nur ein Teil der Daten im Grid angezeigt. Um aber die nicht angezeigten Daten nicht zu verlieren, must du mindestens die nicht angezeigten Daten zwischenspeichern. Da bietet es sich auch gleich an, die gesamten Daten im Hintergrund zu speichern.
Die eigentliche Abfrage ist dann eine Schleife über das Datenarray, wo für jeden DS entschieden wird ob die Bedingung zutrifft. Die Bedingung ist je nach Datentyp (String, int...) mit entweder der AnsiString-Methoden oder mit normalen Operatoren überprüfbar. Ist die Bedingung erfüllt wird der DS in das Grid eingetragen. Das bedeutet das vor jeder Abfrage der Inhalt des Grids gelöscht werden muß.Es gibt auch embedded Datenbanken, die auf reine CVS-Dateien zugreifen können. Das heißt du hast weder einen dedizierten Server noch dedizierte Datenbank-Dateien.
bis bald
akari
-
Hey danke für die antwort!
Theoretisch könnte ich doch einfach die Daten (wenn ich nach der Suche wieder alle Daten angezeigt haben will) nochmals aus der Datei auslesen oder? Dann könnt i mir das Array sparen.
Kannst du mir nen Link geben oder die AnsiString-Methoden kurz erläutern?
Ich MUSS eine Datei nehmen da mein sch**** lehrer das so will

bis bald
-
Hallo
ja du könntest immer wieder aus der Datei lesen, was aber langsamer sein kann als das Array.
Die AnsiString-Methoden findest du hier und in der BCB-Hilfe.
bis bald
akari
-
Insbesondere solltest du einen Blick auf AnsiStartsString(Text), AnsiContainsString(Text) und AnsiEndsString(Text). Die Methoden mit Text statt String sind die Case insensitiven.
-
fast richtig.
Die case-sensitiven Varianten heißen AnsiStartsStr() etc.
Eine weitere (sehr komplexe aber auch sehr mächtige) Methode wäre der Einsatz von boost::regex.
-
Also der ich bin wenn man es genau nehmen will der jenige der des Programm schreiben soll der marcap hat nur den Post hier reingemacht weil er helfen wollte.
Die geschichte mit regex hab ich au schon gehört aber kläglich gescheitert da ich es in der kurzen Zeit die mir zu Verfügung steht es niemals lernen werde
