Plik.txt w memo lub richedit

Odpowiedz Nowy wątek
2006-12-09 23:57
reachel
0

Znalazlem <ort>mnustwo </ort>topicow na temat odcztu tekstu z pliku ale nie mogelem znalez mojego problemu. Zrobilem slownik, moge tlumaczyc, dodawac nowe wyrazy. Chcial bym rowniez moc wyswietlic moja baze z plik.txt wedlug wybranej <ort>kategori </ort>np:budynki w MEMO albo RichEdit.

np:

kategoria:
[ ] osoby
[x] budynki
[ ] zwierzeta

SZUKAJ<<

i teraz nie moge poradzic sobie z wysiwetleniem wyrazów z kategori BUDYNKI w memo lub RichEdit

Pozostało 580 znaków

2006-12-10 05:21
DW
0

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>

Pozostało 580 znaków

2006-12-10 20:04
reachel
0

dzieki :) mam nadzieje ze sobie poradze

Pozostało 580 znaków

2006-12-11 14:41
DW
0

Powodzenia :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0