LINUX.ORG.RU

perl одной строкой


0

0

у меня есть 2 файлика с временем формата
hh:mm:ss,mmm -- hh:mm:ss,mmm
где mm -минуты, а mmm -милисекунды.
к примеру
1 файл
00:48:00,120 -- 00:48:01,394
2 файл
00:01:06,880 -- 00:01:10,839
мне нужно складывать значения и вот так получить в итоге...
00:48:00,120 -- 00:48:01,394
00:49:07,000 -- 00:49:12,231
anonymous

не понятно. в каждом файле по 1й строке? если нет - то не ясно что печатать. 1ю строку из 1го файла потом первую из первого плюс первую из второго? потом первая из первого плюс вторая из второго и т.д. потом 2ю из первого... ну ты понял короче. =) Или просто каждую с каждой складывать?

teferiincub
()
Ответ на: комментарий от teferiincub

нет, тут нужно как-бы сложить все время.
т.е. у меня файлики с кучей последовательных тайм-сиков, нужно из друх файлов собрать один, что-бы если из первого время кончается(в нем ниче менять не нужно, а во втором последовательно сдвигать каждый промежуток в зависимости от следующего)
1 файл
00:00:00,000 -- 00:00:00,000
...
00:42:15,346 -- 00:42:16,127
00:48:00,120 -- 00:48:01,394

2 файл
00:00:00,000 -- 00:00:00,000
00:01:06,880 -- 00:01:10,839
...
00:32:55,386 -- 00:32:56,027

т.е. нужно начинать с последней строчки первого файла ибо там есть конечное время и потом его наращивать из второго файла...
p.s. покажите как такой формат сделать и как складывать, а дальше я уже сам сложу думаю=)

anonymous
()

use warnings;
use strict;

my $a = '00:01:06,880';
my $b = '00:48:56,120';

print $a,"\n+\n",$b,"\n=\n", summ($a, $b),"\n";

sub summ {
    my @a = split(/\D/, shift);
    my @b = split(/\D/, shift);
    my @c;

    $c[3] = $a[3] + $b[3];
    if ($c[3] > 999) {
        $c[2]++;
        $c[3] -= 1000;
    }
    $c[3] = '0'.$c[3] if $c[3] < 100;
    $c[3] = '0'.$c[3] if $c[3] < 10;

    $c[2] += $a[2] + $b[2];
    if ($c[2] > 59) {
        $c[1]++;
        $c[2] -= 60
    }
    $c[2] = '0'.$c[2] if $c[2] < 10;

    $c[1] += $a[1] + $b[1];
    if ($c[1] > 59) {
        $c[0]++;
        $c[1] -= 60
    }
    $c[1] = '0'.$c[1] if $c[1] < 10;

    $c[0] += $a[0] + $b[0];
    $c[0] = '0'.$c[0] if $c[0] < 10;

    return "$c[0]:$c[1]:$c[2],$c[3]"
}

PoMbl4
()
Ответ на: комментарий от anonymous

попробуй перевести все время в UNIX timestamp и плюсуй сколько нужно, а потом выведи из timestamp в нужный формат.

ElectroNik ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.