Słownik w delphi

B6
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
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.

mychal
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Przedmonitorze Górne
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.

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

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

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12272
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:

Kopiuj
; 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:
Kopiuj
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:

Kopiuj
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.