Musisz mieć wyrazy przyporządkowane do kategorii.
Nie bardzo jestem w stanie bliżej coś powiedzieć, bo nie napisałeś w jaki sposób działa Twój słownik.
Zakładam jednak, że wyrazy masz pokategoryzowane w plik.txt np w ten sposób:
budynek;publiczny;szkoła
budynek;prywatny;szkoła
budynek;prywatny;biurowiec
osoba;dorosły;nauczyciel
osoba;dziecko;uczeń
osoba;dorosły;policjant
Zrób sobie typ (obiekt, albo rekord):
Type
TWord = class(TObject)
MainCat : Integer;
LesserCat : Integer;
Word : WideString;
end;
Zadeklaruj dwa globalne obiekty typu TStrings dla kategorii i jeden TList jako słownik:
var
MainCat, LesserCat : TStrings;
Words : TList;
Zainicjuj je w np OnCreate formularza:
begin
MainCat.Create;
LesserCat.Create;
Words.Create;
{...}
end;
Wtedy podczas wczytywania dodaj słowa do listy wrzucając kategorie:
While not F.Eof do
begin
{...tutaj załaduj linie z pliku i podziel splitem na 3 słowa w tablicy LineArray...}
MainIndex := MainCat.IndexOf(LineArray[0]);
If MainIndex = -1 then
MainIndex := MainCat.Add(LineArray[0]);
LesserIndex := LesserCat.IndexOf(LineArray[1]);
If LesserIndex = -1 then
LesserIndex := LesserCat.Add(LineArray[1]);
MyWord.Create;
MyWord.MainCat := MainIndex;
MyWord.LesserCat := LesserIndex;
MyWord.Word := LineArray[2];
Words.Add(MyWord);
end;
Dopisz jeszcze procedurkę dla sprawdzania kategorii (tutaj: MainCat):
procedure TForm1.ShowWordsFromMainCat(CatName : WideString);
begin
Memo1.Clear;
MainIndex := MainCat.IndexOf(CatName);
If MainIndex <> -1 then
For I := 0 to Words.Count-1 do
begin
If TWord(Words.Items[I]).MainCat = MainIndex then
Memo1.Lines.Add(TWord(Words.Items[I]).Word);
end;
end;
I to w zasadzie wszystko. Jak masz dość duży słownik, to zamiast TList użyj haszowanej Array of TList, na pewno znacznie przyśpieszy proces wyszukiwania samych słów (ale nie po kategorii).
pzdr.</delphi>