![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск фрагментов в тексте и замена
Vikindos © (2008-07-17 23:38:00)Доброго времени суток. Вот что не могу сделать.
Есть текст вида (string): "Конференция для начинающих, а также для тех, кому сложно объяснить чего он хочет. Конференция для начинающих, а также для тех, кому сложно объяснить чего он хочет." и нужно в этом тексте заменить текст от слова "для" до слова "тех" на слово "дельфи".
Что получится:
"Конференция для дельфи тех, кому сложно объяснить чего он хочет. Конференция для дельфи тех, кому сложно объяснить чего он хочет."
Прошу помощи в написании функции.
Германн (2008-07-19 00:41:00) [1]
> Дмитрий Белькевич © (18.07.08 02:47) [8]
>
> >и нужно в этом тексте заменить текст от слова "для" до
> слова "тех" на слово "дельфи".
>
> >В общем случае задача не решаема.
>
> Не так разьве:
>
> Результат = ""
>
> Ищем "для"
> Результат = Результат + найденное + "дельфи"
> Пропускаем до "тех"
> Продолжаем до конца строки
>
> ?
>
Это не общий случай. Это решение для частного примера приведенного в сабже. Но сей пример явно взят с потолка.
Vikindos (2008-07-19 00:22:00) [2]всем спасибо, справился.
Vikindos (2008-07-18 13:37:00) [3]Спасибо Дмитрий.
Как тут сделать, что бы что бы конечное слово искал, а то что между словами заменяла на "дельфи"
function ReplaceStr(const S, Srch, Replace: string): string;
var
I: Integer;
Source: string;
begin
Source := S;
Result := '';
repeat
I := FastPos(Srch, Source);
if I > 0 then
begin
Result := Result + Copy(Source, 1, I - 1) + Replace;
Source := Copy(Source, I + Length(Srch), MaxInt);
end
else
Result := Result + Source;
until I <= 0;
end;
Дмитрий Белькевич (2008-07-18 02:47:00) [4]>и нужно в этом тексте заменить текст от слова "для" до слова "тех" на слово "дельфи".
>В общем случае задача не решаема.
Не так разьве:
Результат = ""
Ищем "для"
Результат = Результат + найденное + "дельфи"
Пропускаем до "тех"
Продолжаем до конца строки
?
Германн (2008-07-18 01:35:00) [5]В общем случае задача не решаема.
В примере автора нужно два вызова Pos и по одному разу вызовы Delete и Insert.
Дмитрий Белькевич (2008-07-18 01:22:00) [6]Только чуть поправить, правда, что бы конечное слово искал, и пропускал кусок.
Дмитрий Белькевич (2008-07-18 01:15:00) [7]
function ReplaceStr(const S, Srch, Replace: string): string;
var
I: Integer;
Source: string;
begin
Source := S;
Result := '';
repeat
I := FastPos(Srch, Source);
if I > 0 then
begin
Result := Result + Copy(Source, 1, I - 1) + Replace;
Source := Copy(Source, I + Length(Srch), MaxInt);
end
else
Result := Result + Source;
until I <= 0;
end;
Айс?
S@shka (2008-07-18 01:01:00) [8]var asOld, asNew, temp : String;
a : Integer;
asOld := - твоя строка
asNew := '';
while (TRUE) do
begin
temp := IdGlobal.Fetch (asOld,'для',True);
if (temp = '') then break;
asNew := asNew + temp + 'для';
temp := IdGlobal.Fetch (asOld,'тех',True);
if (temp = '') then break;
asnew := asNew + ' delphi тех';
end;
IdGlobal - стандартная поставка INDY в Delphi6
Vikindos (2008-07-17 23:49:00) [9]не получается, пробовал =((
function Replace(const Str, Str1, Str2: PChar): string;
var
P, L: Integer;
begin
Result := str;
L := Length(Str1);
repeat
P := Pos(Str1, Result);
if P > 0 then
begin
Delete(Result, P, L);
Insert(Str2, Result, P);
end;
until P = 0;
end;
Как тут сделать цикл от и до слова "тех"
Vikindos (2008-07-17 23:48:00) [10]Желательно бы только Copy()Pos()Delete()
Loginov Dmitry (2008-07-17 23:43:00) [11]Copy(), "+", StringReplace(), Pos() в помощь!