Słownik w delphi

0

Chciałbym napisać w Delphi słownik, tzn. wpisuje słowo w jednym języku i wyskakuje słowo w drugim, nie chodzi o tłumaczenie zdań. Problem tkwi w tym że nie wiem jak zrobic baze danych słow. Czy ktos poda jakiś pomysł. Myślałem nad dwoma plikami tekstowymi, jeden ze slowami w j.polskim drugi w angielskim.

0

Możliwości masz bardzo dużo. Nawet można na plikach ini :) delphi XE3 ma już wbudowane komponenty obsługujące bazę SQLite.

0

Najłatwiej skorzystać z plików *.ini bądź TStringList.
Najwydajniej skorzystać z jakiejś lokalnej bazy danych zapisywanej do pliku.

0

Bazy SQL były by ciekawym rozwiązaniem, ale jeśli nie znasz jeszcze ich obsługi i przede wszystkim potrzebujesz to zrobić jak najprościej, to skorzystaj z plików INI; Zrób w tym pliku tyle sekcji, ile jest liter i w każdej sekcji wpisz najlepiej alfabetycznie posortowane słowa; W programie utwórz obiekt klasy TINIFile i sprawdź, czy w sekcji o literze takiej, jaka jest pierwsza szukanego słowa istnieje klucz o nazwie takiej, jakie szukane słowo; Dla przykładu:

; Plik INI
; Słownik polsko-angielski

[l]
{...}
liczba=number
{...}

wyszukasz w sekcji l klucza o nazwie liczba i jeśli taki klucz istnieje - zwracasz jego wartość (tu: number); Aby sprawdzić, czy dane słowo istnieje w słowniku możesz wykorzystać dwie metody:

  • sprawdzić, czy istnieje klucz o nazwie liczba za pomocą metody iniFile.ValueExists i jeśli istnieje - pobrać wartość tego klucza metodą iniFile.ReadString,
  • bez sprawdzania istnienia klucza pobrać wartość klucza o nazwie liczba ustawiając wartość domyślną na pusty ciąg, po czym sprawdzić tą wartość - jeśli jest pusty ciąg to znaczy, że takie słowo nie istnieje w słowniku, a jeśli zwróci jakąkolwiek inną wartość to słowo istnieje;
    Przykładowa funkcja zwracająca angielski odpowiednik słowa liczba:
uses INIFiles;

function TranslateWord(const ASearchWord: String; var{/out} AEquivalent: String): Boolean;
var
  iniDictionary: TINIFile;
begin
  iniDictionary := TINIFile.Create('C:\Pol-Ang.ini');

  try
    AEquivalent := iniDictionary.ReadString(ASearchWord[1], ASearchWord, '');
    Result := AEquivalent <> '';
  finally
    iniDictionary.Free();
  end;
end;

wykorzystanie:

const
  SEARCH_WORD = 'liczba';
var
  sEquivalent: String;
begin
  if TranslateWord(SEARCH_WORD, sEquivalent) then
    Write('"', SEARCH_WORD,'" [PL] = "', sEquivalent, '" [ANG]')
  else
    Write('Search word is not found...');

  ReadLn;
end.

Jest to bardzo proste rozwiązanie, jednak przy sporej ilości słów w słowniku może działać wolno.

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