Главная страница
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.012 c
1-94816
Holy
2003-05-19 12:57
2003.05.29
Перекодировка текста


3-94664
vvvvv
2003-05-12 14:31
2003.05.29
Как через ADO подключится к запароленной базе Access?


1-94951
edicon
2003-05-17 00:34
2003.05.29
ExcelApplication


14-95038
Johnny Smith
2003-05-08 15:28
2003.05.29
Поздравляю: мы уже не девочки :((((


3-94712
Eugenex
2003-05-07 14:55
2003.05.29
Никаких