Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2011, 07:31   #1
lamer811
 
Регистрация: 12.08.2010
Сообщений: 8
Сообщение Транслитерация отдельных слов в memo

Всем доброго времени суток
Встала задача перевести русские буквы в английские по собственному словарю - это было решено довольно быстро, но дальше встала загвоздка.
Допустим имеется 2 поля memo, с исходным текстом и результатом
Нужно, чтобы транслировались слова через одно.
Например:
Исходный текст: Какая сегодня хорошая погода
Результат должен получиться: Kakaя сегодня xopoшaя погода
Подскажите как это реализовать?


Мой код функции:
Код:
function Transliterate(s: string): string;
var
 i: integer;
 t: string;
begin
 for i:=1 to Length(s) do
  begin
   case s[i] of
        'а': t:=t+'a';
        'А': T:=T+'A';
        'б': t:=t+'6';
        'Б': T:=T+'6';
        'в': t:=t+'B';
	'В': T:=T+'B';
        'г': t:=t+'r';
        'Г': T:=T+'r';
        'е': t:=t+'e';
        'Е': T:=T+'E';
        'ё': t:=t+'e';
        'Ё': T:=T+'E';
        'з': t:=t+'3';
        'З': T:=T+'3';
      else t:=t+s[i];
   end;
  end;
 Result:=t;
Код кнопки:
Код:
var
 i: integer;
begin
 Memo2.Lines.Clear;
 for i:=0 to Memo1.Lines.Count-1 do
  Memo2.Lines.Add(Transliterate(Memo1.Lines.Strings[i]));
end;
lamer811 вне форума Ответить с цитированием
Старый 12.04.2011, 06:02   #2
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

Код:
function Seps(As_Arg: Char): Boolean;
begin
     Seps := As_Arg in [#0..#$1F, ' ', '.', ',', '?', ':', ';', '(', ')', '/', '\']; // привет Сергею Близникову ;)
end;

function Transliterate(s: string): string;
var i: integer;
    b:boolean;
begin
     b:=true;
     for i:=1 to Length(s) do
     begin
          if b and not seps(s[i]) then
          case s[i] of
            'а': s[i]:='a';
            'А': s[i]:='A';
            'б': s[i]:='6';
            'Б': s[i]:='6';
            'в': s[i]:='B';
            'В': s[i]:='B';
            'г': s[i]:='r';
            'Г': s[i]:='r';
            'е': s[i]:='e';
            'Е': s[i]:='E';
            'ё': s[i]:='e';
            'Ё': s[i]:='E';
            'з': s[i]:='3';
            'З': s[i]:='3';
            'к': s[i]:='k';
            'К': s[i]:='K';
          end
          else if b and seps(s[i]) then b:=false
          else if not b and seps(s[i]) then b:=true;
     end;
     Result:=s;
end;
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможные варианты написания отдельных слов Byurrer Общие вопросы C/C++ 7 14.04.2011 07:16
Удаление одинаковых слов в Memo. sxcine Общие вопросы Delphi 7 03.01.2011 12:56
Сохранение текста типа Memo без создания отдельных файлов Haladdin БД в Delphi 23 30.12.2010 13:14
Можно ли программно предопределять стиль отдельных слов в строковом выражении? G_George Microsoft Office Word 3 06.12.2009 15:47
Выделение слов цветом в Memo Костян Пират Общие вопросы Delphi 9 05.03.2009 08:52