Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
1-1196965642
@!!ex
2007-12-06 21:27
2008.08.24
Как получиьт изображение окна?


15-1215509948
Yanis
2008-07-08 13:39
2008.08.24
Что за кодировка?


15-1215167631
Elster
2008-07-04 14:33
2008.08.24
Ищем программиста Delphi/Oracle. Киев


2-1216559033
ДжоШуа
2008-07-20 17:03
2008.08.24
не понимаю


2-1216046956
Vikindos
2008-07-14 18:49
2008.08.24
Замена слов в массиве