Форум: "Основная";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
ВнизФункция замены слов в тексе Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.04 c