![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Функция замены слов в тексе [D6, Win2k]
dreamse © (2005-10-12 08:37:00)В общем стала такая задача написать функцию которая бы меняла определёные слова в тексте на значения из программы , например
слово %time%
мы делаем запрос : zmenaslova('proverca ля ля ля %time% 2222')
в итоге получаем строку : proverca ля ля ля 10:02:04 2222
Все слова типа %time% заранее определены и обрабатываються в функции
Возможно у вас есть наработки в данном направлении. Если есть то прошу поделиться так как встала проблема и нужо её решить быстро , так как проект встал
Digitman (2005-10-12 11:33:00) [1]
> dreamse (12.10.05 09:41) [3]
var s: String = 'proverca ля ля ля %time% 2222'#10#13'proverca ля ля ля %TiMe% 2222';
s := StringReplace(s, '%time%', 'фа фа фа', [rfReplaceAll, rfIgnoreCase]);
Antonn (2005-10-12 10:21:00) [2]можно перевести при сравнивании
if lowercase('ABC')=lowercase('AbC') then
dreamse (2005-10-12 10:17:00) [3]> dmitry501 © (12.10.05 10:01) [4]
MS SQL 2000 (MSDE)
Не хотел обрабатывать при переводе в верхний регистр :( ?
При переводе в нижний всё отлично работает.
Всем спасибо за внимание.
dmitry501 (2005-10-12 10:01:00) [4]dreamse (12.10.05 9:41) [3]
Это у какого SQL сервера язык регистрозависимый?
dreamse (2005-10-12 09:41:00) [5]> Lamer@fools.ua © (12.10.05 08:56) [2]
А как a функции проверить пишеться ли значение вот так : %time% или фот так : %TIME% или вообще вот так %TiMe% ? Ведь иначе можно допусить ошибку и строка не будет обработана , а переводить все в веh[ybq или нижний регист не пойдёт так как нарушаеться синтаксис кода , например запрос SQL который чувствителен к регистру
Lamer@fools.ua (2005-10-12 08:56:00) [6]SysUtils.StringReplace()
dreamse (2005-10-12 08:54:00) [7]Так как от вас ничего не дождёшься :) то нашёл сам решение :
Функция замены в строке всех вхождений одной подстроки на другую
--------------------------------------------------------------------------------
Автор: Матюшкин Сергей
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