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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2009, 00:45   #1
Kib
Пользователь
 
Регистрация: 19.04.2009
Сообщений: 70
По умолчанию Замена символов на латинские и ни чего лишнего

В общем заменяю символы так:
Код:
...
Prefics:=StringReplace(Prefics,'Г','G',[rfReplaceAll, rfIgnoreCase]);
...
- но так очень много кода получается(и вычислений), а так же боюсь что то пропустить.

Мне нужно чтоб все русские буквы были заменены на латинские(А=A,а=a,Б=B,б=b,В=V,в=v, и т.д.), а символы ~!@#$%^&*() и т.д. убирались.

Кам можно это сделать не перечисляя все символы? Заранее благодарю.
Kib вне форума Ответить с цитированием
Старый 29.06.2009, 01:18   #2
Zeraim
Ra-Ra ?
Форумчанин
 
Аватар для Zeraim
 
Регистрация: 06.03.2008
Сообщений: 286
По умолчанию

Попробуй в цикле, от одного номера символа до другого, а вместо самих букв chr() (где в скобках номер символа нужного). Нуи простенькая прога которая выдаст тебе те самые номера.
Вложения
Тип файла: zip ProjectChars.zip (197.5 Кб, 30 просмотров)
Zeraim вне форума Ответить с цитированием
Старый 29.06.2009, 10:14   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
все русские буквы были заменены на латинские(А=A,а=a,Б=B,б=b,В=V,в=v
а вы не в курсе, что русских буковок 33, а латинских всего 26 ? На что будете заменять буквы Ч,Ш,Ю,Щ, Я ??

Цитата:
Кам можно это сделать не перечисляя все символы?
проще всего использовать такой подход:
Код:
const
  table1='абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
  Table2 : array[1..66] of string =(
   'a','b','v','g','d','e','e','zh','z','i','i','k','l',
   'm','n','o','p','r','s','t','u','f','kh','ts','ch','sh',
   'shc','"','y','''','e','yu','ya ',
   'A','B','V','G','D','E','E','ZH','Z','I','I','K','L',
   'M','N','O','P','R','S','T','U','F','KH','TS','CH','SH',
   'SHC','"','Y','''','E','YU','YA';
...
   flWasChages := false;
   NewS := '';
   for i:=1 to Length(s) do
    if Pos(s[i],table1) > 0 then begin
       NewS := NewS + Table2[Pos(s[i],table1)];
       flWasChages := true
    end
    else
       NewS := NewS + s[i]; {вот этот кусок кода можете выкинуть - он те символы, 
           которые не являются русскими буквами,
           просто добавляет к выходной строке}
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.06.2009, 11:18   #4
Kib
Пользователь
 
Регистрация: 19.04.2009
Сообщений: 70
По умолчанию

Спасибо большое Serge_Bliznykov!!!
Сделал такую функцию:
Код:
function PrefCreate(s: string) : string;
const
  table1='абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
  Table2 : array[1..66] of string =(
   'a','b','v','g','d','e','e','zh','z','i','i','k','l',
   'm','n','o','p','r','s','t','u','f','kh','ts','ch','sh',
   'shc','"','y','''','e','yu','ya ',
   'A','B','V','G','D','E','E','ZH','Z','I','I','K','L',
   'M','N','O','P','R','S','T','U','F','KH','TS','CH','SH',
   'SHC','"','Y','''','E','YU','YA');
var
flWasChages: boolean;
NewS: string;
i: integer;
begin
   flWasChages := false;
   NewS := '';
   for i:=1 to Length(s) do
    if Pos(s[i],table1) > 0 then begin
       NewS := NewS + Table2[Pos(s[i],table1)];
       flWasChages := true
    end
    else
       NewS := NewS + s[i];
    Result:=NewS;
end;
Все отлично работает.
Если хотим чтоб другие символы не появлялись, то коментим эти строчки:
Код:
//else
//NewS := NewS + s[i];

Последний раз редактировалось Kib; 29.06.2009 в 11:28.
Kib вне форума Ответить с цитированием
Старый 29.06.2009, 11:25   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

если Вы не используете переменную flWasChages
Код:
flWasChages: boolean;
то выкиньте её. Она же для Вас только усложняет код!
останется (тело функции):
Код:
begin
   NewS := '';
   for i:=1 to Length(s) do
    if Pos(s[i],table1) > 0 then
       NewS := NewS + Table2[Pos(s[i],table1)]
    else
       NewS := NewS + s[i];
    Result:=NewS;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.06.2009, 12:00   #6
Kib
Пользователь
 
Регистрация: 19.04.2009
Сообщений: 70
По умолчанию

Точно! Не заметил
Kib вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифрование, замена символов. foE Общие вопросы Delphi 4 26.05.2009 12:03
Поиск и замена групп символов данными из edit в memo treefantom Общие вопросы Delphi 5 26.10.2008 17:26
Замена символов из таблицы sadpoet Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 02.03.2008 15:33
Замена символов PAVEL315 Общие вопросы Delphi 1 03.02.2007 21:56