За последние 24 часа нас посетили 20364 программиста и 1094 робота. Сейчас ищут 826 программистов ...

Очень сложная задача

Тема в разделе "Регулярные выражения", создана пользователем neurol, 23 мар 2019.

  1. neurol

    neurol Новичок

    С нами с:
    23 мар 2019
    Сообщения:
    5
    Симпатии:
    0
    После выполнения Deshaker in batch mode (программа для стабилизации видео)
    у меня получился файл 2.txt вложен внизу (ПЕРЕМЕЩЕНИЯ блоков заданий)
    файл 1.txt вложен внизу (БЕЗ ПЕРЕМЕЩЕНИЯ блоков заданий)
    В какой программе и с каким кодом регулярных выражений осуществить масштабную перестановку заданий 1.txt и сделать как в 2.txt
    Рассмотрены для примера 3 файла (2 задачи на один файл), но может быть и свыше 1000.
    С уважением к неравнодушным.
     

    Вложения:

    • 1.txt
      Размер файла:
      84,1 КБ
      Просмотров:
      11
    • 2.txt
      Размер файла:
      84 КБ
      Просмотров:
      10
  2. Павел Голубцов

    Павел Голубцов Активный пользователь

    С нами с:
    4 мар 2019
    Сообщения:
    183
    Симпатии:
    4
    Можно подробней что куда переставлять? Где третий файл? Что за задачи?
     
  3. neurol

    neurol Новичок

    С нами с:
    23 мар 2019
    Сообщения:
    5
    Симпатии:
    0
    Из текста 1.txt получить 2.txt
     
  4. Павел Голубцов

    Павел Голубцов Активный пользователь

    С нами с:
    4 мар 2019
    Сообщения:
    183
    Симпатии:
    4
    Ну так в чем глобально они отличаются, суть проблемы? в 1 хоть по порядку идут во 2 нет, что происходить то должно ?
     
  5. neurol

    neurol Новичок

    С нами с:
    23 мар 2019
    Сообщения:
    5
    Симпатии:
    0
    В Папке S:\01 находятся видеофайлы с именами СегодняDR00090000.mp4, СегодняDR00090004.mp4, СегодняDR00090006.mp4нужно их стабилизировать, перевести в формат mov и поместить в папку S:\02.
    Deshaker выполняет эти операции в 2 прохода, в первом проходе анализирует видеофайлы, во 2 проходе конвертирует и записывает в папку S:\02.
    1.txt и 2.txt это примеры JOB LIST для пакетной обработки Deshaker. 1.txt - НЕПРАВИЛЬНЫЙ а 2.txt - ПРАВИЛЬНЫЙ.
    Поэтому задача -- из 1.txt получить 2.txt
    В какой программе и с каким кодом регулярных выражений?
     
  6. Павел Голубцов

    Павел Голубцов Активный пользователь

    С нами с:
    4 мар 2019
    Сообщения:
    183
    Симпатии:
    4
    Что же такое )
    В Папке S:\01 находятся видеофайлы с именами СегодняDR00090000.mp4, СегодняDR00090004.mp4, СегодняDR00090006.mp4нужно их стабилизировать, перевести в формат mov и поместить в папку
    Здесь лежит 1.txt ?
    Здесь создается и лежит 2.txt ? (который получается с правильными данными после обработки?)
    Что не правильно в 1.txt, что именно, надо переносить.
    Подробней о файлах что с ними происходит?
    Какая нам разница о том что ты там делаешь с mp4.
    Опиши подробно что делать надо с txt.
    Надо было родится медиумом.
     
  7. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    видимо, нужно сделать файл шаблон для этих операций обработки.
    а потом просканировать каталог с видео-файлами, и просто сделать для них реальные JOB-листы, заменив в шаблоне имена файлов на реальные.(+ может ещё какуюто мета информацию, вижу там ID ещё меняются..)
     
    neurol нравится это.
  8. neurol

    neurol Новичок

    С нами с:
    23 мар 2019
    Сообщения:
    5
    Симпатии:
    0
    В 1.txt
    // $job "Job 613"
    // $input "S:\01\СегодняDR00090000.mp4"
    // $job "Job 614"
    // $input "S:\01\СегодняDR00090004.mp4"
    // $job "Job 615"
    // $input "S:\01\СегодняDR00090006.mp4"
    // $job "Job 616"
    // $input "S:\01\СегодняDR00090000.mp4"
    // $output "S:\03\СегодняDR00090000.mov"
    // $job "Job 617"
    // $input "S:\01\СегодняDR00090004.mp4"
    // $output "S:\03\СегодняDR00090004.mov"
    // $job "Job 618"
    // $input "S:\01\СегодняDR00090006.mp4"
    // $output "S:\03\СегодняDR00090006.mov"

    нужно переставить чтобы стало как в 2.txt:
    // $job "Job 613"
    // $input "S:\01\СегодняDR00090000.mp4"
    следовал:
    // $job "Job 616"
    // $input "S:\01\СегодняDR00090000.mp4"
    // $output "S:\03\СегодняDR00090000.mov"
    и далее:
    // $job "Job 614"
    // $input "S:\01\СегодняDR00090004.mp4"
    // $job "Job 617"
    // $input "S:\01\СегодняDR00090004.mp4"
    // $output "S:\03\СегодняDR00090004.mov"
    // $job "Job 615"
    // $input "S:\01\СегодняDR00090006.mp4"
    // $job "Job 618"
    // $input "S:\01\СегодняDR00090006.mp4"
    // $output "S:\03\СегодняDR00090006.mov"
     
  9. Emilien

    Emilien Активный пользователь

    С нами с:
    30 июн 2016
    Сообщения:
    246
    Симпатии:
    156
    PHP:
    1. $input  = '1.txt';
    2. $output = '1_fix.txt';
    3.  
    4.     '~^// \$job .*^//-+\r?\n~ms',
    5.     function ($match) {
    6.         preg_match_all('~^// \$job .*?\$input "([^"]*).*?\$output "([^"]*).*?^//-+\r?\n~ms', $match[0], $jobs, PREG_SET_ORDER);
    7.  
    8.         usort($jobs, function ($a, $b) {
    9.             return strcmp($a[1].$a[2], $b[1].$b[2]);
    10.         });
    11.  
    12.         return implode(array_column($jobs, 0));
    13.     },
    14.     file_get_contents($input)
    15. );
    16.  
    17. file_put_contents($output, $text);
     
  10. neurol

    neurol Новичок

    С нами с:
    23 мар 2019
    Сообщения:
    5
    Симпатии:
    0
    Для проверки этого скрипта, я должен скомпилировать дистрибутив PHP под свою Win10? Или есть такая возможность в другой программе? Попробовать сделать .cmd из этого скрипта?
     
  11. Emilien

    Emilien Активный пользователь

    С нами с:
    30 июн 2016
    Сообщения:
    246
    Симпатии:
    156
    Всё уже скомпилировано https://windows.php.net/download#php-7.3
    Или реализовать на PowerShell.
    Файл sort.ps1
    Код (Text):
    1. $input  = "1.txt"
    2. $output = "1_.fix.txt"
    3. $enc = [system.text.encoding]::GetEncoding('windows-1251')
    4. $txt = [system.io.file]::ReadAllText($input, $enc)
    5.  
    6. $callback = {
    7.     $m = [regex]::matches($args[0], '(?ms)^// \$job .*?\$input "([^"]*).*?\$output "([^"]*).*?^//-+\r?\n')
    8.     $m = $m | Sort-Object { $_.Groups[1].Value + $_.Groups[2].Value }
    9.     -join $m
    10. }
    11.  
    12. $re = [regex]'(?ms)^// \$job .*^//-+\r?\n'
    13. [system.io.file]::WriteAllText($output, $re.Replace($txt, $callback),  $enc)
    И файл sort.bat для запуска.
    Код (Text):
    1. powershell.exe -ExecutionPolicy bypass -File sort.ps1
     
    neurol нравится это.