Форум: "Основная";
Текущий архив: 2003.05.29;
Скачать: [xml.tar.bz2];
Внизкак мне %x заменить на переменную x в строке? Найти похожие ветки
← →
mdk (2003-05-16 22:39) [0]как мне %x заменить на переменную x в строке?, хотелось бы использовать шаблоны типа "%track - %artisit - %title" как это используется во многих программах
← →
L (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 хранятся указатели а посему если переные и изменят свое значение то заботится о новом построении контенера нет необходимости.
← →
L (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c