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

Вниз

как мне %x заменить на переменную x в строке?   Найти похожие ветки 

 
mdk ©   (2003-05-16 22:39) [0]

как мне %x заменить на переменную x в строке?, хотелось бы использовать шаблоны типа "%track - %artisit - %title" как это используется во многих программах


 
©   (2003-05-16 23:28) [1]

В контейнере slData:TStringList хранится имя переменной и ее адресс.

slData.AddObject("track",[указатель переменной track]);
так заполняеш контейнер.

S:="%track - %artisit - %title";
Result:="";
sName:string; \\название переменной

ind:=pos("%",S);
while ind>0 do begin
Result:=Result+Copy(S,1,ind); \\Сохраняем текст идущий до переменной
delete(S,1,ind);\\ Удаляем его из строки
ind:=pos("_",S); \\ "_"-это пробел или другой символ который разделяет слова или буквы в твоем шаблоне
sName:=Copy(S,1,ind-1); \\ Название переменной
delete(S,1,ind-1); \\ Удаляем название
ind:=slData.IndexOf(sName); \\ Ищем индей этой переменной в контейнере
if ind>0 then \\ Поиск удался
Result:=Result+<slData.Objects[ind]>; \\ Добираемся до указателя и преобразовываем данные в строку
ind:=Pos("%",S); \\Поиск следущего названия переменной
end;

Замечания:
Алгоритм будет работаль быстрее если вместо delete помнить начало и конец обрабатываемой позиции.
В slData хранятся указатели а посему если переные и изменят свое значение то заботится о новом построении контенера нет необходимости.



 
©   (2003-05-16 23:36) [2]

Опечатка в строке
Result:=Result+Copy(S,1,ind); \\Сохраняем текст идущий до переменной

Нужно Copy(S,1,ind-1); так как "%" в окончательном варианте не нужен


 
Юрий Зотов ©   (2003-05-17 00:01) [3]

S := StringReplace(S, "%title", "title", [rfReplaceAll]);

И все. Детали см. в справке.


 
Vorobyev Sergey   (2003-05-17 10:15) [4]

Привет всем!

>Юрий Зотов
>L
Вы это что?
Есть же замечательная функция Format() (аналогично Си)

s := Format("String - %s, Numeric - %d", [sString, nNumeric]);

См. Help в Дельфи


 
y-soft ©   (2003-05-17 12:00) [5]

>Vorobyev Sergey (17.05.03 10:15)

Format в отличие от StringReplace не позволяет использовать после % произвольные строки


 
Юрий Зотов ©   (2003-05-17 13:05) [6]

> Vorobyev Sergey (17.05.03 10:15)
> Вы это что?

Я - ничего. А Вы? Не поторопились? Можете сделать с помощью Format замену "%title" на "title"? Одной строкой?

См. Help в Дельфи.


> mdk

Вот общее решение:

function ReplacePattern(Source, Pattern: string; IgnoreCase: boolean): string;
const
Flags: array[boolean] of TReplaceFlags =
([rfReplaceAll], [rfReplaceAll, rfIgnoreCase]);
begin
Result := StringReplace(Source, "%" + Pattern, Pattern, Flags[IgnoreCase])
end



 
Vorobyev Sergey   (2003-05-17 14:39) [7]


> Я - ничего. А Вы? Не поторопились?

Извиняюсь.. Поторопился..



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

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

Наверх




Память: 0.48 MB
Время: 0.016 c
7-95141
keymaster
2003-03-30 22:25
2003.05.29
Свой шрифт в программе


3-94660
P.Kert
2003-05-07 10:58
2003.05.29
Необходимо вставить BLOB !!!


7-95137
Konstantionov
2003-03-31 12:18
2003.05.29
Работа с реестром


1-94823
nevalex
2003-05-19 14:49
2003.05.29
Как написать компанент что-то вроде TMediaplyer?


4-95175
Manix
2003-04-01 20:21
2003.05.29
Как послать сообщение программе о нажатии мыши