нужно сделать переводчик, слова берёт из тхт, слова разных языков разделены пробелом. подскажыте плз что за косяк в цикле (и ваще я так делаю или нет? >__> ) плюс интересная штука в последней строке переменную f почемуто принимает за стринг, хотя везде описал как буль
Код
Output.Text:=''; f:=false; repeat
if BaseField.Text[i]<>' ' then Str:=Str+BaseField.Text[i] else begin if BaseField.Text=Str then begin f:=true; repeat Output.Text:=Output.Text+BaseField.Text[i]; inc(i); until BaseField.Text[i]=' '; Str:='' end; end;
почему, собственно если брать значение arr[1], то это - 'cat'? Так же и там, только индекс - не целое число, а строка...
Теперь чуть подробнее о том, как работает непонятный тебе код:
// поскольку слова как ты написал разделяются пробелом // делаем разделителем пробел SL.Delimiter := ' ';
// Следующая строка заносит текст, который БУДЕТ разделяться в StringList // А вот чтобы не было проблем при введении больше чем одного пробела // я все лишние пробелы из списка слов убираю через StringReplace // (вместо группы пробелов остается только один) SL.DelimitedText := StringReplace(Input.Text,' ', ' ', [rfReplaceAll]);
// тут проходим по всем строкам StringList-а (благодаря тому, что лишние пробелы убраны, // можно гарантировать, что на каждой его строке будет новое слово которое надо перевести) for i := 0 to pred(SL.Count) do
// ищем перевод этого слова в контейнере (по нужному индексу), // и добавляем соответствующее ему переведенное слово в Output ... Output.Text := Output.Text + BaseField.Values[SL[i]];
Цитата
если она англ и ввели слово "dog" то как вывести "собака"
Нельзя этого делать с одним словарем... Для двухстороннего перевода понадобятся 2 словаря: англо-русский и русско-английский... Но можно и схитрить:
procedure TDictionary.FormCreate(Sender: TObject); var i, p:integer; SL: TStringList; begin SL := TStringList.Create; SL.LoadFromFile('base.txt');
for i := 0 to pred(SL.Count) do begin p := Pos(' ', SL[i]); ValueListEditor1.InsertRow(copy(sl[i], 1, p - 1), copy(sl[i], p + 1, length(sl[i]) - p), true); // Рус -> Англ ValueListEditor1.InsertRow(copy(sl[i], p + 1, length(sl[i]) - p), copy(sl[i], 1, p - 1), true); // Англ -> Рус end;
SL.Free; end;
Теперь у тебя будет двухсторонний словарь: ищешь по русскому индексу - находишь перевод на английский, и наоборот...