Одесса: 4°С (вода 9°С)
Киев: 1°С
Львов: 6°С

Тема: Помогите с простеньким парсером плиз!

Ответить в теме
Показано с 1 по 7 из 7
  1. Вверх #1
    Новичок
    Пол
    Мужской
    Адрес
    Одесса
    Сообщений
    48
    Репутация
    19

    По умолчанию Помогите с простеньким парсером!

    нужен простенький парсер, который в файле переведет все даты на 42 секунды назад.
    Пример дат в файле:
    1
    00:01:03,000 --> 00:01:06,100
    -- 3 of a kind.
    -- That's it? 3 guys?

    2
    00:01:06,200 --> 00:01:09,700
    2 guys on the roof
    Every guys gets a share, 5 Shares is plenty
    Нужно получить:

    1
    00:00:21,000 --> 00:00:24,100
    -- 3 of a kind.
    -- That's it? 3 guys?

    2
    00:00:24,200 --> 00:00:27,700
    2 guys on the roof
    Every guys gets a share, 5 Shares is plenty
    Вложения
    Последний раз редактировалось Vert; 17.08.2008 в 15:00.


  2. Вверх #2
    Код:
    #!/bin/bash
    perl -e 'while(<>) { s{(\d\d):(\d\d):(\d\d),(\d\d\d)} { my $t=$1*3600+$2*60+$3+24*3600-42; sprintf "%02d:%02d:%02d,%03d",(($t/3600)%24),(($t/60)%60),($t%60),$4;}ge; print }'
    имхо должно работать

    хотя ты бы уточнял на каком языке надо, а то ответят добрые люди на BrainFuck'е
    The future is already here - it is just unevenly distributed. (c) W. Gibson

  3. Вверх #3
    Постоялец форума Аватар для Яр
    Пол
    Мужской
    Адрес
    Odessa.Ua
    Возраст
    30
    Сообщений
    2,952
    Репутация
    148
    Вариант на python %)

    Код:
    from __future__ import with_statement
    from datetime import datetime, timedelta, MINYEAR
    import re
    import sys
    
    DELTA = 42
    
    r = re.compile("((\d\d):(\d\d):(\d\d),(\d\d\d))")
    for line in sys.stdin.readlines():
        fa = r.findall(line)
        if (fa):
            for m in fa:
                t = datetime(MINYEAR,1,1,int(m[1]),int(m[2]),int(m[3]),int(m[4])) - timedelta(0,DELTA)
                line = line.replace(m[0], "%02d.%02d.%02d,%03d"  
                       %  (t.hour, t.minute, t.second, t.microsecond))
        print line,
    Под виндой может ругаться при < из файла.
    ~ Motivation is what gets you started. Habit is what keeps you going.

  4. Вверх #4
    Новичок
    Пол
    Мужской
    Адрес
    Одесса
    Сообщений
    48
    Репутация
    19
    Цитата Сообщение от homo ludens Посмотреть сообщение
    Код:
    #!/bin/bash
    perl -e 'while(<>) { s{(\d\d):(\d\d):(\d\d),(\d\d\d)} { my $t=$1*3600+$2*60+$3+24*3600-42; sprintf "%02d:%02d:%02d,%03d",(($t/3600)%24),(($t/60)%60),($t%60),$4;}ge; print }'
    имхо должно работать

    хотя ты бы уточнял на каком языке надо, а то ответят добрые люди на BrainFuck'е
    Спасибо! а можно отпарсеный файлик, если не затруднит?

  5. Вверх #5
    лови.
    Только он не с 00:00:00 теперь начинается, а с 23:59:28.
    Вложения
    • Тип файла: zip dk.zip (46.6 Кб, Просмотров: 4)
    The future is already here - it is just unevenly distributed. (c) W. Gibson

  6. Вверх #6
    Новичок
    Пол
    Мужской
    Адрес
    Одесса
    Сообщений
    48
    Репутация
    19
    спасибо!
    оффтоп: фокус не удался. Субтитры сначала идут вровень, потом оттормаживаются.. Буду ждать русского релиза фильма.

  7. Вверх #7
    Частый гость Аватар для Lexis
    Пол
    Мужской
    Адрес
    Одесса
    Возраст
    32
    Сообщений
    715
    Репутация
    166
    Скачай прогу dsrt. Она специально для работ с субтитрами сделана. Сам пользуюсь часто (анимешникам в подсобку ). Если надо отдельную часть подправить, то выделяешь начальную и последнюю фразу, а затем сдвигаешь. В общем разберешься, прога простенькая
    Только смерть помогает понять смысл жизни


Ответить в теме

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения