Главная страница
    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
3-94754
Arkady
2003-05-09 15:29
2003.05.29
Максимальный объем базы данных Access 2000


9-94650
ogo
2002-12-15 10:41
2003.05.29
текстурирование


7-95150
Azbul
2003-03-27 09:46
2003.05.29
как закрыть процесс


3-94719
kostas
2003-05-08 12:26
2003.05.29
Запросы TIBQuery в разных потоках (нитях.TTheard)


9-94652
Эдуард
2002-12-17 05:11
2003.05.29
Программирование вращения





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