Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.06;
Скачать: CL | DM;

Вниз

Функция замены слов в тексе   Найти похожие ветки 

 
dreamse   (2005-10-12 08:37) [0]

В общем стала такая задача написать функцию которая бы меняла определёные слова в тексте на значения из программы , например

слово %time%

мы делаем запрос : zmenaslova("proverca ля ля ля %time% 2222")
в итоге получаем строку : proverca ля ля ля 10:02:04 2222

Все слова типа %time% заранее определены и обрабатываються в функции

Возможно у вас есть наработки в данном направлении. Если есть то прошу поделиться так как встала проблема и нужо её решить быстро , так как проект встал


 
dreamse   (2005-10-12 08:54) [1]

Так как от вас ничего не дождёшься :) то нашёл сам решение :



Функция замены в строке всех вхождений одной подстроки на другую
--------------------------------------------------------------------------------

Автор: Матюшкин Сергей
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Функция замены в строке всех вхождений одной подстроки на другую

В отличие от других подобных функций, эта - не зависнет, если в строке нужно
заменить не только одно слово совершенно другим,
но и допустим, слово "Штаны" на "-Штаны-"
(Т.е. начальное слово после замены остается, но к нему добавляется какой нибудь
символ справа, или слева. В данном случае по краям слова добавлен знак минуса).

Я пересмотрел много примеров, и ни один из них не справился с этой задачей.
(Может я плохо искал?).

Зависимости: Windows, SysUtils
Автор:       Матюшкин Сергей, seregam@ua.fm, ICQ:162733776, Днепропетровск
Copyright:   Sergey_M
Дата:        26 мая 2003 г.
***************************************************** }

function Replace(Str, X, Y: string): string;
{Str - строка, в которой будет производиться замена.
X - подстрока, которая должна быть заменена.
Y - подстрока, на которую будет произведена заменена}

var
 buf1, buf2, buffer: string;
 i: Integer;

begin
 buf1 := "";
 buf2 := Str;
 Buffer := Str;

 while Pos(X, buf2) > 0 do
 begin
   buf2 := Copy(buf2, Pos(X, buf2), (Length(buf2) - Pos(X, buf2)) + 1);
   buf1 := Copy(Buffer, 1, Length(Buffer) - Length(buf2)) + Y;
   Delete(buf2, Pos(X, buf2), Length(X));
   Buffer := buf1 + buf2;
 end;

 Replace := Buffer;
end;
Пример использования:

procedure TForm1.Button1Click(Sender: TObject);
var
 a: Integer;
begin
 for a := 0 to Memo1.Lines.Count do
   Memo1.Lines[a] := Replace(Memo1.Lines[a], "Штаны", "-Штаны-");
end;



Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay





 
Lamer@fools.ua ©   (2005-10-12 08:56) [2]

SysUtils.StringReplace()


 
dreamse   (2005-10-12 09:41) [3]

> Lamer@fools.ua ©   (12.10.05 08:56) [2]

А как a функции проверить пишеться ли значение вот так :  %time% или фот так :  %TIME% или вообще вот так  %TiMe% ? Ведь иначе можно допусить ошибку и строка не будет обработана , а переводить все в веh[ybq или нижний регист не пойдёт так как нарушаеться синтаксис кода , например запрос SQL который чувствителен к регистру


 
dmitry501 ©   (2005-10-12 10:01) [4]

dreamse   (12.10.05 9:41) [3]
Это  у какого SQL сервера язык регистрозависимый?


 
dreamse   (2005-10-12 10:17) [5]

> dmitry501 ©   (12.10.05 10:01) [4]

MS SQL 2000  (MSDE)

Не хотел обрабатывать при переводе в верхний регистр :( ?

При переводе в нижний всё отлично работает.

Всем спасибо за внимание.


 
Antonn ©   (2005-10-12 10:21) [6]

можно перевести при сравнивании
if lowercase("ABC")=lowercase("AbC") then


 
Digitman ©   (2005-10-12 11:33) [7]


> dreamse   (12.10.05 09:41) [3]


var s: String = "proverca ля ля ля %time% 2222"#10#13"proverca ля ля ля %TiMe% 2222";
s := StringReplace(s, "%time%", "фа фа фа", [rfReplaceAll, rfIgnoreCase]);



Страницы: 1 вся ветка

Текущий архив: 2005.11.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.044 c
1-1129474977
wp2
2005-10-16 19:02
2005.11.06
Обработка событий для элементов, которые находятся в динамическом


2-1128972479
Zut
2005-10-10 23:27
2005.11.06
получение данных из Access


14-1129238296
LordOfRock
2005-10-14 01:18
2005.11.06
Ну, только сразу не бейте :) (опять про сайт)


3-1127796192
Сергей_1983
2005-09-27 08:43
2005.11.06
Группировка в dxDBGrid


14-1128680845
SPeller
2005-10-07 14:27
2005.11.06
Бас-подгон от государства