Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Структура кода при обработке текстов, Структура кода при обработке текстов 
:(
    Опции темы
Pcrepair
Дата 17.6.2012, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 16.1.2011

Репутация: нет
Всего: нет



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

Код

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');

--------------------
Сборник рабочего кода Процедур и Функций DelPhi     http://validcoderepo.narod.ru/
PM MAIL WWW   Вверх
CynicRus
Дата 18.6.2012, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 31.5.2012

Репутация: 2
Всего: 5



Унаследуйся от TList, запихни туда нужные слова. А потом - цикл по списку, и вуаля.
PM MAIL   Вверх
iff
Дата 18.6.2012, 12:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: нет
Всего: 16



А можно просто передать массив (наверно) и его длину.
Или можно передать строку в которой слоа разделены разделителем: 'ророр|рпак|вяваса|опрнаев' и уже в процедуре разделить на массив.

А можно не изменять процедуру, а сделать так:
Код

const
  wordscount = 4;
  words : array[1..wordscount] of string = ('ророр', 'рпак', 'вяваса', 'опрнаев');
  replaceword = 'СЛОВО2'

var i : 1..wordscount;

{...}

for i := 1 to wordscount do
  Exchange(T, words[i], replaceword);



Это сообщение отредактировал(а) iff - 18.6.2012, 12:17


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0407 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.