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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2009, 05:56   #1
foE
 
Регистрация: 26.05.2009
Сообщений: 4
По умолчанию

Всем привет! Хочу попросить совета, а может и помощи.
У меня имеется задача в которой требуется заменить в тексте(текст большой) одни символы на другие.
Т.е. имеется текст и в нем я заменяю букву 'д' на 'ж'; 'в' на 'д'; 'о' на 'ы', к примеру:

"В тот же день, но уже вечером, часу в седьмом, Раскольников подходил к квартире"
И в итоге должно получится
"д тыт же жень, ны уже дечерым, часу д сежьмым, Раскыльникыд пыжхыдил к кдартире"

С помощью каких функций и процедур это можно сделать, а то совсем ничего в голову не лезет??И если можно маленькие примерчики, мне просто так понятнее. Заранее спасибо...

P.S. Текст я читаю из файла и потом перемещаю его Memo-поле. Текст является нормализованным т.е., он переведет в верхний регистр( все буквы заглавные) и отсутствуют знаки препинания и спец. символы.

Вот код того что есть, до данной проблемы -Текст является нормализованным т.е., он переведет в верхний регистр( все буквы заглавные) и отсутствуют знаки препинания и спец. символы.

Код:
// Z33
procedure TForm2.Button2Click(Sender: TObject);
var
  s,st,buf,zam,zamena:string[255];
  f: TextFile;
  i:integer;
  options       : TReplaceFlags;
  begin
    options := [rfReplaceAll, rfIgnoreCase];
    fName := Edit1.Text; AssignFile(f, fName);
    Reset(f); // открыть для чтения {$I+}
    while not EOF(f) do begin
    readln(f, buf); // прочитать строку из файла
    st:=buf;
    st:=AnsiUpperCase(st);
    zam:=st;
      for I := 0 to 127  do
        begin
        s:=chr(i);
        zam:=AnsiReplaceStr (zam, s, '');
        zamena:=zam;
        end;
        Memo2.Lines.add(zamena);
                          end;
    CloseFile(f);
  end;

Последний раз редактировалось Stilet; 26.05.2009 в 08:28.
foE вне форума Ответить с цитированием
Старый 26.05.2009, 08:44   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну сделай массив:
Код:
 a:array[1..3,1..2] of char=(('д','ж'),('в','д'),('о','ы'));
А потом в цикле проходи:
Код:
for i:=1 to length(st) do
 for k:=1 to 3 do
  if st[i]=a[k,1] then begin st[i]:=a[k,2]; break;end;
Код с потолка. так что пробуй.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.05.2009, 11:25   #3
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

Есть хорошая функцыя StringReplace.. почему бы не использовать ее??

Код:
var ws:WideString;
begin
 ws:=Memo1.Text;
 StringReplace(ws, 'Д', 'Ж', [rfReplaseAll]);
 StringReplace(ws, 'В', 'Д', [rfReplaseAll]);
 StringReplace(ws, 'О', 'Ы', [rfReplaseAll]);
//имено большие, потому что ты перевел все в верхний регистр
 Memo1.Text:=ws;

вроде бы както так..
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"
Ntlegend вне форума Ответить с цитированием
Старый 26.05.2009, 11:42   #4
foE
 
Регистрация: 26.05.2009
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Ntlegend Посмотреть сообщение
Есть хорошая функцыя StringReplace.. почему бы не использовать ее??

Код:
var ws:WideString;
begin
 ws:=Memo1.Text;
 StringReplace(ws, 'Д', 'Ж', [rfReplaseAll]);
 StringReplace(ws, 'В', 'Д', [rfReplaseAll]);
 StringReplace(ws, 'О', 'Ы', [rfReplaseAll]);
//имено большие, потому что ты перевел все в верхний регистр
 Memo1.Text:=ws;

вроде бы както так..
Все бы хорошо, но есть одно НО- мне требуется вводить эту последовательность, ту чем будем заменять,
т.е. я ее могу вести и 'Ж' 'Д' 'Ы' и 'Д' 'Ы' 'Ж' и 'Ы' 'Ж' 'Д' ,а таких букв 32 штуки (все буквы кроме Ё) -
Эту последовательность я перепишу в поле Edit или поле Memo или сразу буду брать из файла -это я смогу сделать. Я не могу придумать сам процесс замены.
Конечно можно сделать так:
StringReplace(ws, 'Д', 'Ж', [rfReplaseAll]);
StringReplace(ws, 'В', 'Д', [rfReplaseAll]);
StringReplace(ws, 'О', 'Ы', [rfReplaseAll]);
...
StringReplace(ws, 'Р', 'В', [rfReplaseAll]);
и таких строчек будет 32 и вместо букв Ж Д Ы .... В сделать 32 поле (Edit .Text) Но это уже будет какое-то извените извращение
foE вне форума Ответить с цитированием
Старый 26.05.2009, 12:03   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Но это уже будет какое-то извените извращение
И что мешает сделать это в цикле, а буквы в массив пихнуть?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена кода программы с Delhi5 на Delhi7 либо замена базы данных с Acessa на MySQL DorianLeroy Фриланс 8 18.02.2009 18:52
Поиск и замена групп символов данными из 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