Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.008 c
7-95143
kickboxing
2003-03-31 10:02
2003.05.29
API


1-94937
chuvak
2003-05-08 15:48
2003.05.29
Как в ресурс exe-шку запехнуть а потом в рантайме ее от туда


14-95100
Style
2003-04-24 19:51
2003.05.29
Delphi Challenge: И все-таки нужно подумать.


4-95168
Puke Zero
2003-04-02 23:19
2003.05.29
Программа не даёт завершить сеанс


14-95102
Домарощинер
2003-05-11 19:31
2003.05.29
Просмотр и редактирование файлов *.dbf





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский