нужно сделать переводчик, слова берёт из тхт, слова разных языков разделены пробелом.
подскажыте плз что за косяк в цикле (и ваще я так делаю или нет? >__> )
плюс интересная штука в последней строке переменную f почемуто принимает за стринг, хотя везде описал как буль
until (BaseField.Text[i]='') or (f=true);
until (BaseField.Text[i]='') or f;
гоменасай забыл прикрепить файл)
kr3v3tkus, я бы на твоем месте вместо TMemo для хранения словаря использовал TValueListEditor... Придется чуть-чуть добавить кода при инициализации программы (читать файл и записывать в TValueListEditor вручную), зато потом основной цикл станет таким:
procedure TDictionary.TransClick(Sender: TObject);
var
i:integer;
SL: TStringList;
begin
SL := TStringList.Create;
try
SL.Delimiter := ' ';
SL.DelimitedText := StringReplace(Input.Text, ' ', ' ', [rfReplaceAll]);
for i := 0 to pred(SL.Count) do
Output.Text := Output.Text + ValueListEditor1.Values[SL[i]] + ' ';
finally
SL.Free;
end;
end;
procedure TDictionary.FormCreate(Sender: TObject);, и у тебя есть готовый массив с индексами-строками, никаких велосипедов...
var
i, p:integer;
SL: TStringList;
begin
SL := TStringList.Create; // Создаем StringList
SL.LoadFromFile('base.txt'); // Читаем файл в StringList
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
); // ... заполняем ValueEditor
end;
SL.Free; // Освобождаем StringList
end;
вольвыыыыч позялста последние 2 вопроса
ValueListEditor1.InsertRow('собака', 'dog', true);ты задаешь однозначно: "если будут искать 'собаку' - это 'dog'"... Вот тут же у тебя не возникает сомнения:
const arr: array[1 .. 2] of string = (
'cat', 'dog'
);
// поскольку слова как ты написал разделяются пробелом
// делаем разделителем пробел
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]];
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;
ууу пасибки, въехал царь во дворца