![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Структура кода при обработке текстов
Pcrepair © (2012-06-17 11:28:00)Добрый день. Есть, к примеру, такая процедура:
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');
brother (2012-06-17 11:47:00) [1]> или всетаки правильно так и делать:
для твоей задачи (да и вообще) не правильно...
Медвежонок Пятачок (2012-06-17 11:46:00) [2]Вопрос: можно ли все СЛОВО1 как то прописать в виде массива?
можно
brother (2012-06-17 11:45:00) [3]а если
> T: TStringList; First: String; Second: String
заменить на TStringList и в процедуре проверять не одно слово а список слов на соответствие Second: String?
Pcrepair (2012-06-17 11:42:00) [4]у каждого свои развлечения
Медвежонок Пятачок (2012-06-17 11:34:00) [5]а почему не регулярками?