Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2011, 21:48   #21
NITROGEN_92
Пользователь
 
Регистрация: 25.08.2009
Сообщений: 12
По умолчанию

Потрудившись чуток (и посмотрев на код ZuBy), вот что я написал...
Код:
function FormatString(Rule: String): String;
var
  s, sA, sB, sC: String;
  i, j: Integer;
begin
  if Pos('%IF(', Rule) > 0 then
  begin
    i := Pos('%IF(', Rule) + 4;
    j := PosEx(',', Rule, i) - i;
    sA := Copy(Rule, i, j); // A

    i := PosEx(sA, Rule, i) + Length(sA) + 1;
    j := PosEx(',', Rule, i) - i;
    sB := Copy(Rule, i, j); // B

    i := PosEx(sB, Rule, i) + Length(sB) + 1;
    j := PosEx(')', Rule, i) - i;
    sC := Copy(Rule, i, j); // C

    sA := FormatString(sA);
    sB := FormatString(sB);
    sC := FormatString(sC);

    if sA = '' then Result := sC else Result := sB;
    //FormatString(Result);
    Exit;
  end;
  if pos('%Artist', Rule) > 0 then
    Rule := ReplaceStr(Rule, '%Artist', 'Исполнитель');
  if pos('%Title', Rule) > 0 then
    Rule := ReplaceStr(Rule, '%Title', 'Заголовок');
  if pos('%Album', Rule) > 0 then
    Rule := ReplaceStr(Rule, '%Album', 'Альбом');
  if pos('%Year', Rule) > 0 then
    Rule := ReplaceStr(Rule, '%Year', 'Год');
  if pos('%Genre', Rule) > 0 then
    Rule := ReplaceStr(Rule, '%Genre', 'Жанр');
  if pos('%Duration', Rule) > 0 then
    Rule := ReplaceStr(Rule, '%Duration', '05:00');
  if pos('%FileSize', Rule) > 0 then
    Rule := ReplaceStr(Rule, '%FileSize', '10,2 Mb');
  if pos('%FileName', Rule) > 0 then
    Rule := ReplaceStr(Rule, '%FileName', 'Трек_5.mp3');
  Result := Rule;
end;
Если не придираться (а я придерусь), то кодом можно пользоваться хоть сейчас! Так вот, что насчет придирок: данное выражение можно использовать только один раз (т.е если дублировать форматируемую строку, то отформатируется только первая ее часть). Например:
Код:
%IF(%Artist,%Artist - %Title,%Title) // Тут все ок!
А здесь %Duration игнорируется:
Код:
%IF(%Artist,%Artist - %Title,%Title) [%Duration]
И тут трабл:
Код:
%IF(%Artist,%Artist - %Title,%Title) --- %IF(%Artist,%Artist - %Title,%Title)
В первом примере, если кто не понял, возвращается "%Artist - %Title", если "%Artist" не пуст, иначе "%Title". А во втором должно получиться то же, что и в первом, только к результату должна приплюсоваться длительность " 05:00" (включая пробел).
Может кто-то разберется? Функция написана, имхо, больше, чем на 70 - 80%. Дело за малым! Заранее благодарен ))

Последний раз редактировалось NITROGEN_92; 06.08.2011 в 21:54.
NITROGEN_92 вне форума Ответить с цитированием
Старый 07.08.2011, 14:31   #22
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

вот смотри в чем вся загвоздка, нужно искать последний (вложенный в %IF) %IF и делать его форматирование, потом предпоследний также и самый первый.
при чем это надо делать в такое порядке
запоминаем текст который был до начала %IF и после, форматируем %IF возвращаем его "начало+отформатированный текст+конец" и повторяем пока не будет найден %IF

Последний раз редактировалось ZuBy; 07.08.2011 в 14:42.
ZuBy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Форматирование текста Tomoyo HTML и CSS 2 18.07.2013 19:33
Форматирование текста Arsenx777 Работа с сетью в Delphi 1 31.05.2011 14:55
Форматирование текста Sergey2 Общие вопросы Delphi 10 23.09.2009 08:04
Форматирование текста. Altera Общие вопросы Delphi 3 11.05.2009 23:29
Форматирование текста rusif Помощь студентам 1 17.12.2007 22:28