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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 30.04.2014, 20:27   #1
XE5
Заблокирован
 
Регистрация: 02.03.2014
Сообщений: 439
По умолчанию Можно ли применить функцию format в таком случае?

Имеем 3 переменных типа integer, хранящие соответственно количество дней, часов, и минут. Можно ли функцией format, либо иной подобной функцией вывести приблизительно такой текст.
Код:
2 дн. 4ч. 3 мин.
Входные числа могут равняться, либо быть меньше нуля. Тогда эти числа должны игнорироваться, т.е.
Код:
2 дн. 3 мин.
- часы меньше, или равны нулю.

......
Код:
if a1 > 0 then ..
if a2 > 0 then ..
if a3 > 0 then ..
Такой вариант понятен, можно не предлагать.

Последний раз редактировалось XE5; 30.04.2014 в 21:22.
XE5 вне форума
Старый 30.04.2014, 20:41   #2
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Ну format для это не предназначен, он просто подставляет данные в нужных местах.

Вам проще создать две/три константы:

Код:
const
  Format_1 = '%d дн. %dч. %d мин.';
  Format_2 = '%d дн. %d мин.';
  ...
И через if then, case сделать

Ну или переписать функцию Format
ZuBy вне форума
Старый 30.04.2014, 20:52   #3
XE5
Заблокирован
 
Регистрация: 02.03.2014
Сообщений: 439
По умолчанию

ZuBy Может есть иные аналогичные format встроенные функции, которые удовлетворяют таким условиям? Их, я знаю, несколько есть.
XE5 вне форума
Старый 30.04.2014, 21:01   #4
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Цитата:
Сообщение от XE5 Посмотреть сообщение
ZuBy Может есть иные аналогичные format встроенные функции, которые удовлетворяют таким условиям? Их, я знаю, несколько есть.
Я по крайней мере не знаю, но могу предложить еще такой способ

По памяти как-то так, поправьте если ошибаюсь
Код:
 Str := ReplaceString(' 0ч. ', ' ', Str, [ReplaceAll]);
ZuBy вне форума
Старый 30.04.2014, 21:15   #5
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Код:
type ff = packed record
 dni,
 chasi,
 minute: integer;
end;
var tf: ff;

...
const
paramdat = 'Дни %d Часы %d Минуты %d';

...
...:= format(paramdat, [ff.dni, ff.chasi, ff.minute]);
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума
Старый 30.04.2014, 21:17   #6
XE5
Заблокирован
 
Регистрация: 02.03.2014
Сообщений: 439
По умолчанию

ZuBy Идея ясна, спасибо. Хотелось бы конечно решение в одну строчку. С ReplaceString не прокатит. Чувствую что есть такая функция. Буду искать.
raxp Не уловил смысла. Выполнение условия i > 0 не вижу.

Последний раз редактировалось XE5; 30.04.2014 в 21:20.
XE5 вне форума
Старый 30.04.2014, 21:20   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Входные числа могут равняться, либо быть меньше нуля. Тогда эти числа должны игнорироваться
недочитал.

...но вообще, ноль никогда при визуализации не игнорируется, это всегда значащее число/символ. В какой конкретно задаче такое могло понадобиться?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума
Старый 30.04.2014, 21:28   #8
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Думаю будильник или что-то подобное
ZuBy вне форума
Старый 30.04.2014, 21:37   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Чувствую что есть такая функция.
По-моему нет такой функции.
Я когда-то для себя описал
Код:
function IIF(a:boolean;b,c:variant):variant;
begin
 if a then result:=b else result:=c;
end;
Соответственно
Код:
...:=iif(a1 > 0,IntToStr(a1)+' дн. ',' ')+
      iif(a2 > 0,IntToStr(a2)+' ч. ',' ')+
      iif(a3 > 0,IntToStr(a3)+' мин. ','');
И часто ее использую.
I'm learning to live...
Stilet вне форума
Старый 30.04.2014, 21:40   #10
XE5
Заблокирован
 
Регистрация: 02.03.2014
Сообщений: 439
По умолчанию

Цитата:
В какой конкретно задаче такое могло понадобиться?
Условное архивирование данных. Входные данные представлены одним большим числом int64. Моя задача разбить это число на "подчисла", и отобразить в текстовом варинте. На пальцах можно изобразить так.
Код:
i := 10000;
a1 := i div 100;
i := i mod 100;
a2 := i div 10;
a3 := i mod 10;
Разложили число на элементы. Осталось вывести. Это всё условно. На деле задача более сложна, я просто дал самую суть, чтоб не путать, и чтоб показать, что это точно не очередной будильник. Собственно вопрос не критичный, мне просто в процессе программирования пришла в голову мысль, что эту часть кода можно упростить.
XE5 вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как применить функцию Predator199 PHP 6 05.08.2012 23:58
как авторизоваться в таком случае? grafgrial Общие вопросы Delphi 2 19.09.2011 21:38
Применить Format и итогу сложения нескольких Edit Gover Общие вопросы Delphi 2 14.08.2011 17:50
Как Firefox рассчитывает ширину столбцов вот в таком случае??? Finer HTML и CSS 3 26.04.2008 16:47
Как можно применить к тексту комонент PageSetupDialog Bill Gates Общие вопросы Delphi 1 30.12.2007 20:17