Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Функция перевода строки из русской в английскую и наоборот.


Страницы:   1 2

Kostik ©   (2006-01-17 04:27:00) 

Существует ли какая нибудь функция для быстрого перевода троки например "qwerty" в "йцукен", и наоборот???
Мне надо чтобы программа умела переводить  русский текст в английский и наоборот именно вот таким образом. В хелпах ответа не нашел...


Kostik   (2006-01-19 13:39:00) [1]

>Fay
>1) Из кода следует, что c и l модет принимать несколько значений одновременно. Это странно.
>2) Есть по два результата для одинаковых аргументов (например i = True, c = ';'). Это тоже очень странно.
>Учитесь думать головой.

Поясните пожалуйста, а то я не понял что то... Просто я не так давно занимаюсь делфи...
А головой то я думаю) Не думал бы - не написал бы САМ ничего.


AbrosimovA   (2006-01-19 13:29:00) [2]

const Translit: array[1..33] of string = ('a','b','v','g','d','e','yo',
       'zh','z','i','j','k','l','m','n','o','p','r','s','t','u','f',
       'x','c','ch','sh','sh`','`','y','''','e`','yu','ya');
     Cyrillic: array[1..33] of string = ('а','б','в','г','д','е','ё',
       'ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф',
       'х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я');

procedure TForm1.mnTransClick(Sender: TObject);
var k: cardinal;
begin
for k:=1 to 33 do
begin
 RichEdt.Lines.Text:=StringReplace(RichEdt.Lines.Text,Cyrillic[k],Translit[k],[rfReplaceAll]);
 RichEdt.Lines.Text:=StringReplace(RichEdt.Lines.Text,AnsiUpperCase(Cyrillic[k]),
  UpperCase(Translit[k]),[rfReplaceAll]);
end
end;


Fay   (2006-01-19 05:01:00) [3]

2 Kostik   (17.01.06 9:57) [5]
1) Из кода следует, что cи lмодет принимать несколько значений одновременно. Это странно.
2) Есть по два результата для одинаковых аргументов (например i = True, c = ';'). Это тоже очень странно.

Учитесь думать головой.


Змей   (2006-01-19 03:44:00) [4]

thank


edit.text   (2006-01-19 03:00:00) [5]

Вот так:


procedure TForm1.Button3Click(Sender: TObject);
var
i, u, k: word;
C: Char;
s : String;
begin
s := '';
  k := 0;
  s := Edit1.Text;
  for u := 1 to Length(s) do
  if pos(char(s[u]), EnCH)<>0 then
   begin
    k := pos(char(s[u]), EnCH);
    C := RuCH[k];
    s[u] := c;
   end;
 Edit1.Text := s;
end;


Змей   (2006-01-19 01:04:00) [6]

Извините у меня вот не richedit а edit.text
как на ней вот это прокатывать? for i := 0 to RichEdit2.Lines.Count-1 do
:(


evvcom   (2006-01-17 15:42:00) [7]


> CvtTable вообще даже в хелпе найти не могу

Anatoly Podgoretsky ©   (17.01.06 12:05) [14] и Johnmen ©   (17.01.06 12:08) [15] говорят об одном и том же. Слей это воедино и поймешь откуда эта CvtTable.


ANB   (2006-01-17 14:02:00) [8]


> и CvtTable вообще даже в хелпе найти не могу...

CvtTable придется самому нарисовать. Это таблица перекодировки - обычный массив.


Kostik   (2006-01-17 13:11:00) [9]

>Anatoly Podgoretsky
>for I := 1 to Length(I) do S[I] := CvtTable[S[I]];
>Быстрее этого нельзя.

Что то я не понял как это использовать....
и CvtTableвообще даже в хелпе найти не могу...


gdaujk   (2006-01-17 12:57:00) [10]

>Johnmen ©   (17.01.06 11:54) [11]

Я и не настаиваю, что это оптимальный вариант. Говорю же, писал давным давно...


Johnmen   (2006-01-17 12:56:00) [11]

>Игорь Шевченко ©   (17.01.06 12:51) [16]

Это чтоб не думать, что там в строке попадётся...:))


Игорь Шевченко   (2006-01-17 12:51:00) [12]

Johnmen ©   (17.01.06 12:08) [15]


> Заводится таблица перекодировки. 256 элементов


Особенно значимыми являются первые 32 символа :)


Johnmen   (2006-01-17 12:08:00) [13]

1. Заводится таблица перекодировки. 256 элементов. На каждом месте X в ней указан код символа, в который преобразуется код X.
2. Пробегаем по байтам исходной строки и делаем замену. s[i]:=TBL[x].

Всё...
И не надо никаких pos, if и пр.


Anatoly Podgoretsky   (2006-01-17 12:05:00) [14]

Kostik   (17.01.06 11:56) [12]
С помощью таблицы подстановки и даже функция не нужно
for I := 1 to Length(I) do S[I] := CvtTable[S[I]];
Быстрее этого нельзя.


Anatoly Podgoretsky   (2006-01-17 12:02:00) [15]

Kostik   (17.01.06 10:10) [8]
Вообще то ты себе льстишь


Kostik   (2006-01-17 11:56:00) [16]

>Johnmen
а как?


Johnmen   (2006-01-17 11:54:00) [17]

Вообще-то, всё это делается, мягко говоря, несколько не так....:)


Kostik   (2006-01-17 11:46:00) [18]

Вроде сделал...
Вроде и работает быстро...
*Большое СПАСИБО   gdaujk  за идею... *

Inglish >>  Russian

var
i, u, k: word;
C: Char;
s : String;
begin
RichEdit2.Lines.BeginUpdate;

s := '';
for i := 0 to RichEdit2.Lines.Count-1 do
  begin
    k := 0;
    s := RichEdit2.Lines.Strings[i];

    for u := 1 to Length(s) do
    if pos(char(s[u]), EnCH)<>0 then
     begin
      k := pos(char(s[u]), EnCH);
      C := RuCH[k];
      s[u] := c;
     end;

   RichEdit2.Lines.Strings[i] := s;
  end;

RichEdit2.Lines.EndUpdate;
end;


Russian >>  Inglish

var
i, u, k: word;
C: Char;
s : String;
begin
s := '';
for i := 0 to RichEdit2.Lines.Count-1 do
  begin
    k := 0;
    s := RichEdit2.Lines.Strings[i];

    for u := 1 to Length(s) do
    if pos(char(s[u]), RuCH)<>0 then
     begin
      k := pos(char(s[u]), RuCH);
      C := EnCH[k];
      s[u] := c;
     end;
   RichEdit2.Lines.Strings[i] := s;
  end;
end;


>_RusLAN
А через Case  я что то не очень понял как сделать то...

Большое спасибо ВСЕМ кто откликнулся! Удачи ВАМ ВСЕМ :)


_RusLAN   (2006-01-17 10:19:00) [19]

Kostik   (17.01.06 10:10) [8]
Только...  почему то моя функция работает быстрее гораздо...  :-[


Используй Case  должно еще быстрее ;)


Kostik   (2006-01-17 10:10:00) [20]

Только...  почему то моя функция работает быстрее гораздо...  :-[


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо