Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
8-1118530099
VoloSoft
2005-06-12 02:48
2005.11.06
Надо перехватить PC-Speaker


1-1128931719
TButton
2005-10-10 12:08
2005.11.06
Drawing (вопрос общего характера)


14-1129373148
Иксик
2005-10-15 14:45
2005.11.06
Вот, блин, совпадения...


2-1129269846
Fynjy1984
2005-10-14 10:04
2005.11.06
Секундомер


1-1129651397
TStas
2005-10-18 20:03
2005.11.06
Как отследить прекращение работы консольного приложения?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский