URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5374
[ Назад ]

Исходное сообщение
"прибавление одного символа значениям нескольких переменных"

Отправлено XPurple , 28-Апр-06 10:38 
Подскажите как сделать так, чтобы если значение переменных < 10 дописывать перед значением
ноль.

Для одной переменной сделать легко, а как сделать для нескольких perem1,perem2,perem3 и т.д ?
$perem1=1
$perem2=12
$perem3=14

Стало
$perem1="01"
$perem2="12"
$perem3="14"


Содержание

Сообщения в этом обсуждении
"прибавление одного символа значениям нескольких переменных"
Отправлено madskull , 28-Апр-06 11:18 
>Подскажите как сделать так, чтобы если значение переменных < 10 дописывать перед
>значением
>ноль.
>
>Для одной переменной сделать легко, а как сделать для нескольких perem1,perem2,perem3 и
>т.д ?
>$perem1=1
>$perem2=12
>$perem3=14
>
>Стало
>$perem1="01"
>$perem2="12"
>$perem3="14"

foreach (1..99) {
  $var="perem$_";
  $$var=sprintf('%02d',$$var);
}

Хотя, подозреваю, что проблема в алгоритме, а не в его реализации...


"прибавление одного символа значениям нескольких переменных"
Отправлено idle , 28-Апр-06 11:47 
>>Подскажите как сделать так, чтобы если значение переменных < 10 дописывать перед
>>значением
>>ноль.
my @a = (1..10);
@a = map { if ($_<10) { $_="0".$_ }  } @a;
TIMTOWTDI ;)
>Хотя, подозреваю, что проблема в алгоритме, а не в его реализации...
Присоединяюсь.



"прибавление одного символа значениям нескольких переменных"
Отправлено XPurple , 28-Апр-06 12:15 
>>>Подскажите как сделать так, чтобы если значение переменных < 10 дописывать перед
>>>значением
>>>ноль.
>my @a = (1..10);
>@a = map { if ($_<10) { $_="0".$_ }  } @a;
>
>TIMTOWTDI ;)
>>Хотя, подозреваю, что проблема в алгоритме, а не в его реализации...
>Присоединяюсь.
Требуется к значениям числа, месяца, часов и секунд добавлять 0, если значение меньше 10.
Не вижу здесь никого особого алгоритма,чтобы в нем ошибиться.


"прибавление одного символа значениям нескольких переменных"
Отправлено madskull , 28-Апр-06 12:25 

>Требуется к значениям числа, месяца, часов и секунд добавлять 0, если значение
>меньше 10.
>Не вижу здесь никого особого алгоритма,чтобы в нем ошибиться.

таки, видимо, нужно что-то вроде:
printf('%02d.%02d.%02d %02d:%02d:%02d', $d,$m,$y,$H,$M,$S);
:)

Каков вопрос - таков ответ.


"прибавление одного символа значениям нескольких переменных"
Отправлено XPurple , 28-Апр-06 12:47 
>
>>Требуется к значениям числа, месяца, часов и секунд добавлять 0, если значение
>>меньше 10.
>>Не вижу здесь никого особого алгоритма,чтобы в нем ошибиться.
>
>таки, видимо, нужно что-то вроде:
>printf('%02d.%02d.%02d %02d:%02d:%02d', $d,$m,$y,$H,$M,$S);
>:)
>
>Каков вопрос - таков ответ.
Я понимаю, но люди с разной квалификацией обращаются
if ($d < 10)
{$d="0$d";}
if ($m < 10)
{$m="0$m";}
Вот эту конструкцию как заменить на более правильную ?


"прибавление одного символа значениям нескольких переменных"
Отправлено idle , 28-Апр-06 13:00 
>>
>>>Требуется к значениям числа, месяца, часов и секунд добавлять 0, если значение
>>>меньше 10.
>>>Не вижу здесь никого особого алгоритма,чтобы в нем ошибиться.
>>
>>таки, видимо, нужно что-то вроде:
>>printf('d.d.d d:d:d', $d,$m,$y,$H,$M,$S);
>>:)
>>
>>Каков вопрос - таков ответ.
>Я понимаю, но люди с разной квалификацией обращаются
>if ($d < 10)
>{$d="0$d";}
>if ($m < 10)
>{$m="0$m";}
>Вот эту конструкцию как заменить на более правильную ?
Вам вроде уже написали. Если речь идёт о датах, тогда более правильно воспользоваться strftime.
use POSIX qw(strftime);
my ($month,$day) = ((strftime "%m",localtime), (strftime "%d",localtime))

"прибавление одного символа значениям нескольких переменных"
Отправлено madskull , 28-Апр-06 14:32 

>Вот эту конструкцию как заменить на более правильную ?

В перле все, что красиво и работает - правильно.
Вариантов полно.

$d="0$d" if $d < 10;
$d < 10 && $d="0".$d;
$d =~ s/^(\d)$/0$1/;
и так далее и тому подобное.

Я бы лично использовал sprintf.


"прибавление одного символа значениям нескольких переменных"
Отправлено XPurple , 03-Май-06 07:10 
>
>>Вот эту конструкцию как заменить на более правильную ?
>
>В перле все, что красиво и работает - правильно.
>Вариантов полно.
>
>$d="0$d" if $d < 10;
>$d < 10 && $d="0".$d;
>$d =~ s/^(\d)$/0$1/;
>и так далее и тому подобное.
>
>Я бы лично использовал sprintf.

А так не очень, как считаете ?
foreach $calc (@before)
    {if ($calc < 10)
{
$hash{$calc}="0$calc";

}
else
{$hash{$calc}=$calc;}


"прибавление одного символа значениям нескольких переменных"
Отправлено madskull , 03-Май-06 08:37 

>А так не очень, как считаете ?
>foreach $calc (@before)
>    {if ($calc < 10)
>{
>$hash{$calc}="0$calc";
>
>}
>else
>{$hash{$calc}=$calc;}

Можно и так. Вот только смысл как-то от меня ускальзывает...
Ведь, по сути, создается массив с соответствующими "zerofill" значениями.
Тогда уж лучше использовать map.


"прибавление одного символа значениям нескольких переменных"
Отправлено XPurple , 03-Май-06 09:09 
>Тогда уж лучше использовать map.
попробую map , спасибо.
А пока остановился на printf '%02d' -для вычисляемых значений и strftime для дат, как вы и предлагали. Лишний раз убеждаюсь - люди на форуме плохого не посоветуют ;)
Первый ответ ваш, madskull, мне понравился своей точностью. Хотя ,как правильно сказали, какой вопрос - такой ответ. ;)



"прибавление одного символа значениям нескольких переменных"
Отправлено XPurple , 03-Май-06 08:18 
>
>Я бы лично использовал sprintf.
Это в другом месте используется. Для вычисления начала и конца недели, т.е. для записи вида 01.05.2006 - 07.05.2006