Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.06.2012, 11:32
Pcrepair
 
Сообщения: n/a
По умолчанию Структура кода при обработке текстов

Добрый день. Есть, к примеру, такая процедура:

Код:
procedure TForm1.Exchange(T: TStringList; First: String; Second: String);
var
  s: String;
  index, len: integer;
begin
  s := T.Text;
  len := Length(First);
  index := AnsiPos(First, s);
  while (index <> 0) do
  begin
    Delete(s, index, len);
    Insert(Second, s, index);
    index := AnsiPos(First, s);
  end;
  T.Text := s;
end;

Процедура находит в тексте СЛОВО1 и меняет его на СЛОВО2
Для обработки текста используется:

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute and FileExists(OpenDialog1.FileName) then
     begin
        T := TStringList.Create;
        T.LoadFromFile(OpenDialog1.FileName);
        Exchange(T, 'СЛОВО1', 'СЛОВО2');
        Memo1.Lines := T;
     end;
end;

Причем Exchange(T, 'СЛОВО1', 'СЛОВО2'); приходится последовательно вызывать и соотвественно
писать в вызове процедуры необходимое количество раз. Допустим СЛОВО2 везде одно и тоже

Вопрос: можно ли все СЛОВО1 как то прописать в виде массива? или еще чего, так чтобы procedure TForm1.Exchange сама брала очередное СЛОВО1 и меняла на СЛОВО2 в тексте. или всетаки правильно так и делать:

Код:
Exchange(T, 'ророр', 'СЛОВО2');
Exchange(T, 'рпак', 'СЛОВО2');
Exchange(T, 'вяваса', 'СЛОВО2');
......
Exchange(T, 'опрнаев', 'СЛОВО2');
Ответить с цитированием
  #2  
Старый 17.06.2012, 11:52
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

можно так:
Код:
procedure ExchangeAll(L: TStringList; a: array of string; b: string);
var i: integer;
begin
  for i := 0 to high(a) do
    Exchange(L, a[i], b);
end;

...

ExchangeAll(StringList, ['a', 'b', 'c'], '*');
а Exchange проще сделать StringReplace-ом
Ответить с цитированием
Этот пользователь сказал Спасибо Pyro за это полезное сообщение:
Pcrepair (17.06.2012)
  #3  
Старый 17.06.2012, 12:00
Pcrepair
 
Сообщения: n/a
По умолчанию

Pyro, спасибо
буду пробовать
Ответить с цитированием
  #4  
Старый 17.06.2012, 20:06
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Pcrepair
Pyro, спасибо
буду пробовать

А что, стандартной функцией StringReplace воспользоваться нельзя?
Ответить с цитированием
  #5  
Старый 18.06.2012, 07:49
Pcrepair
 
Сообщения: n/a
По умолчанию

низзя, слишком простая
Ответить с цитированием
  #6  
Старый 18.06.2012, 08:29
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Ну тогда регэкспы в зубы.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #7  
Старый 18.06.2012, 13:39
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Цитата:
Сообщение от Pcrepair
слишком простая
А как же упрощение кода? Или у вас там особый завод по выпуску индусских быдлокодеров? (ни в коем случае не хочу никого оскорбить)
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:10.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025