Utochka
14.05.2006, 16:07
Это отрывок из моей проги для конвертирования русских букв в латиницу, но возникла проблема обратного конвертирования. Может подскажите наиболее практичный алгоритм. Я придумал кое что но мой код очень запутанный и громоздкий получаеться (.
Проблемы возникают с русскими буквами которые в латинице пишуться двумя.
procedure TForm1.RzBitBtn1Click(Sender: TObject);
begin
if memo1.Text='' then
begin
application.MessageBox('Нет текста для конвертирования','Ошибка',mb_ ok+mb_iconinformation);
exit;
end;
result:='';
ProgressBar1.Position:=0;
memo2.Clear;
for i:=1 to length(Memo1.text) do
begin
for j:=1 to length(EngLet) do
begin
//проверяем ни знак ли какой
if znak[j]=memo1.Text[i] then
begin
Result:=Concat(Result,znak[j]);
break;
end;
//проверяем не пробел ли
if memo1.Text[i]=' ' then
begin
Result:=Concat(Result,' ');
break;
end;
//конвертируем
if Ruslet[j]=Memo1.text[i] then
begin
form1.ProgressBar1.Max:=length(memo1.Text);
form1.ProgressBar1.Position:=i;
Result:=Concat(Result,englet[j]);
break;
end;
end;
// else Result:=Concat(Result, Memo2.text[i]);
end;
memo2.Lines.Add(result);
end;
Проблемы возникают с русскими буквами которые в латинице пишуться двумя.
procedure TForm1.RzBitBtn1Click(Sender: TObject);
begin
if memo1.Text='' then
begin
application.MessageBox('Нет текста для конвертирования','Ошибка',mb_ ok+mb_iconinformation);
exit;
end;
result:='';
ProgressBar1.Position:=0;
memo2.Clear;
for i:=1 to length(Memo1.text) do
begin
for j:=1 to length(EngLet) do
begin
//проверяем ни знак ли какой
if znak[j]=memo1.Text[i] then
begin
Result:=Concat(Result,znak[j]);
break;
end;
//проверяем не пробел ли
if memo1.Text[i]=' ' then
begin
Result:=Concat(Result,' ');
break;
end;
//конвертируем
if Ruslet[j]=Memo1.text[i] then
begin
form1.ProgressBar1.Max:=length(memo1.Text);
form1.ProgressBar1.Position:=i;
Result:=Concat(Result,englet[j]);
break;
end;
end;
// else Result:=Concat(Result, Memo2.text[i]);
end;
memo2.Lines.Add(result);
end;