Текущий архив: 2008.08.24;
Скачать: CL | DM;
Вниз
Поиск фрагментов в тексте и замена Найти похожие ветки
← →
Vikindos © (2008-07-17 23:38) [0]Доброго времени суток. Вот что не могу сделать.
Есть текст вида (string): "Конференция для начинающих, а также для тех, кому сложно объяснить чего он хочет. Конференция для начинающих, а также для тех, кому сложно объяснить чего он хочет." и нужно в этом тексте заменить текст от слова "для" до слова "тех" на слово "дельфи".
Что получится:
"Конференция для дельфи тех, кому сложно объяснить чего он хочет. Конференция для дельфи тех, кому сложно объяснить чего он хочет."
Прошу помощи в написании функции.
← →
Loginov Dmitry © (2008-07-17 23:43) [1]Copy(), "+", StringReplace(), Pos() в помощь!
← →
Vikindos © (2008-07-17 23:48) [2]Желательно бы только Copy()Pos()Delete()
← →
Vikindos © (2008-07-17 23:49) [3]не получается, пробовал =((
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;
Как тут сделать цикл от и до слова "тех"
← →
S@shka (2008-07-18 01:01) [4]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
← →
Дмитрий Белькевич © (2008-07-18 01:15) [5]
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 01:22) [6]Только чуть поправить, правда, что бы конечное слово искал, и пропускал кусок.
← →
Германн © (2008-07-18 01:35) [7]В общем случае задача не решаема.
В примере автора нужно два вызова Pos и по одному разу вызовы Delete и Insert.
← →
Дмитрий Белькевич © (2008-07-18 02:47) [8]>и нужно в этом тексте заменить текст от слова "для" до слова "тех" на слово "дельфи".
>В общем случае задача не решаема.
Не так разьве:
Результат = ""
Ищем "для"
Результат = Результат + найденное + "дельфи"
Пропускаем до "тех"
Продолжаем до конца строки
?
← →
Vikindos © (2008-07-18 13:37) [9]Спасибо Дмитрий.
Как тут сделать, что бы что бы конечное слово искал, а то что между словами заменяла на "дельфи"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;
← →
Vikindos © (2008-07-19 00:22) [10]всем спасибо, справился.
← →
Германн © (2008-07-19 00:41) [11]
> Дмитрий Белькевич © (18.07.08 02:47) [8]
>
> >и нужно в этом тексте заменить текст от слова "для" до
> слова "тех" на слово "дельфи".
>
> >В общем случае задача не решаема.
>
> Не так разьве:
>
> Результат = ""
>
> Ищем "для"
> Результат = Результат + найденное + "дельфи"
> Пропускаем до "тех"
> Продолжаем до конца строки
>
> ?
>
Это не общий случай. Это решение для частного примера приведенного в сабже. Но сей пример явно взят с потолка.
Страницы: 1 вся ветка
Текущий архив: 2008.08.24;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.018 c