Главная страница
    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.01 c
14-95015
Slawic
2003-05-12 23:28
2003.05.29
Виртуальная память


3-94773
Sirus
2003-05-12 09:57
2003.05.29
Сдается мне что FireBird работает медленне чем Interbase...


1-94942
Andrew
2003-05-18 00:06
2003.05.29
Архивация данных


1-94837
PAI
2003-05-19 18:53
2003.05.29
Как создать потомка VCL-класса?


1-94860
AlexProdigy
2003-05-19 11:09
2003.05.29
TDateTimePicker + WinXP = глюк





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