Как превратить форматирование CSV в автоматический BAT-файл «перетаскивания»?


1

Я вывожу необработанные файлы EDL из Avid Media Composer, которые по сути являются просто текстом, который необходимо переформатировать в соответствующие столбцы, чтобы его было легко переварить для человека, получающего его. Из соображений безопасности на используемых нами компьютерах нет подключения к Интернету, поэтому я пытаюсь понять, как этого добиться без использования сторонних инструментов или веб-сайтов из сети.

Файл Raw .EDL при открытии в блокноте выглядит следующим образом:

RAW EDL FILE

В основном это просто сводка срезов, используемых на временной шкале, и соответствующие временные коды источника и места назначения. Приведенный выше пример очень мал по размеру, так как полный EDL может иметь до 1000 срезов (каждая пронумерованная строка является срезом).

Мне удалось отформатировать это вручную с использованием запятых. Я добился этого, добавив запятые и цитаты, чтобы это выглядело так:

Отформатирован для EXCEL

Конечный результат при импорте в Excel такой:

РЕЗУЛЬТАТ В EXCEL

Я также пытался исследовать идею использования Powershell, Get-Contentпытаясь разобрать нужные данные в определенные строки / столбцы, но я полный новичок в этой области, поэтому я не уверен, что я делаю:

$Content = Get-Content "C:\TEST EDIT DECISION LIST.EDL"
$Content | Foreach {


If ($_ -match '[0-9]{1,6}$') 

Таким образом, мне удалось заставить Get-Content прочитать файл EDL, и текст внутри был восстановлен нормально. Затем я попытался применить matchоператор, чтобы заставить его идентифицировать 6-значное число ( 000001), и цель состоит в том, чтобы выяснить, как отправить его в столбец 1, строку 1 (но он не хочет запускаться). Затем мне нужно, чтобы оператор идентифицировал следующую запись ( GUIDE_VO), которая была бы буквенно-цифровой символьной с максимальным ограничением в 32 символа и т. Д., Чтобы придерживаться форматирования, которое я создал вручную для остальной части строки. Мне понадобится Powershell, чтобы прополоскать и повторить процесс через каждую строку в EDL и составить для меня CSV.

Мой вопрос: как мне получить этот файл EDL для вывода в CSV согласно ручному форматированию, которое я сделал? Я хотел бы сделать это возможным с помощью файла «перетаскивания» или подобного рабочего процесса. Записи, которые появляются в необработанном edl , всегда находятся в этом определенном порядке, только имена клипов и исходные файлы различаются в том, что они говорят во всех данных. Номера записей также постепенно увеличиваются с каждой новой строкой данных.

Это необработанный текст из самого файла EDL:

TITLE:   Untitled Sequence.01
000001  GUIDE_VO                         A     C        12:36:54:21 12:37:06:19 01:00:00:00 01:00:11:23 
*FROM CLIP NAME:  SFX CLIP 1 
*SOURCE FILE: GUIDE VO
000002  HORROR.COPY.01.MP3               A     C        01:00:00:00 01:00:22:10 01:00:11:23 01:00:34:08 
*FROM CLIP NAME:  SFX CLIP 2 
*SOURCE FILE: HORROR.COPY.01.MP3
000003  93_HORROR_DRONE.MP3              A     C        01:00:04:15 01:00:08:08 01:00:34:08 01:00:38:01 
*FROM CLIP NAME:  SFX CLIP 3 
*SOURCE FILE: 93 HORROR DRONE.MP3

Большое спасибо заранее за любую помощь или предложения от этого удивительного сообщества!


Пакетный не лучший инструмент для редактирования текстовых файлов. Вам нужен другой инструмент. Можете ли вы получить, например, Notepad ++?
Матэ Юхас

У меня есть Notepad ++. Я просто подумал, что мы также можем автоматизировать решение в пакетном скрипте. Можно ли с легкостью переформатировать в Notepad ++? Я использовал команду Notepad ++ в пакетном скрипте раньше. Я предполагаю, что вы думаете о длинной строке в функции поиска и замены?
Майлс

Я также пытаюсь исследовать синтаксический анализ каждого сегмента данных через «get-content» в powershell, но на самом деле я не очень понимаю, чем занимаюсь
Myles

Ответы:


3
  • Ctrl+H
  • Найти то, что: ^(\S+)\h+(\S+)\h+(\S+)\h+(\S+)\h+(\S+)\h+(\S+)\h+(\S+)\h+(\S+)\h+\R\*FROM CLIP NAME:\h*(.+?)\h*\R.+
  • Заменить: $1,$2,$4,$3,$5,$6,$7,$8,"$9"
  • проверить обернуть
  • проверьте регулярное выражение
  • Снимите флажок . matches newline
  • Replace all

Объяснение:

^               # beginning of line
    (\S+)\h+    # group 1, 1 or more non spaces, then 1 or more horizontal spaces
    (\S+)\h+    # group 2, idem
    ...         # idem until
    (\S+)\h+    # group 8
    \R          # any kind of linebreak
    \*          # asterisk
    FROM CLIP NAME:\h*  # literally FROM CLIP NAME: followed by 0 or more horizontal spaces
    (.+?)       # group 9, 1 or more any character but newline, not greeedy
    \h*         # 0 or more horizontal spaces
    \R          # any kind of linebreak
    .+          # 1 or more any character but newline

Замена:

$1,                 # content of group 1 plus a comma
$2,                 # content of group 2 plus a comma
$4,$3,$5,$6,$7,$8,  # idem
"$9"                # content of group 9 surounded by double quote

Результат для данного примера:

TITLE:   Untitled Sequence.01
000001,GUIDE_VO,C,A,12:36:54:21,12:37:06:19,01:00:00:00,01:00:11:23,"SFX CLIP 1"
000002,HORROR.COPY.01.MP3,C,A,01:00:00:00,01:00:22:10,01:00:11:23,01:00:34:08,"SFX CLIP 2"
000003,93_HORROR_DRONE.MP3,C,A,01:00:04:15,01:00:08:08,01:00:34:08,01:00:38:01,"SFX CLIP 3"

введите описание изображения здесь


Привет Тото! Я просто дал ему и обнаружил, что производит правильное форматирование для импорта в Excel. Мне нужно превратить это в пакетный скрипт перетаскивания, если это возможно. Я собираюсь поэкспериментировать с этим сейчас и посмотреть, смогу ли я заставить его работать, и забрать его, как только я снова вернусь в офис в понедельник. Мне также нужно протестировать его с гораздо большим EDL, который содержит те же записи данных, но гораздо больше. Я действительно ценю всю помощь. Счастливой вам пятницы.
Миль

@Myles: Пожалуйста, рад, что это помогает. Хороших выходных.
Toto

0

если ваш источник

000001  GUIDE_VO                         A     C        12:36:54:21 12:37:06:19 01:00:00:00 01:00:11:23
*FROM CLIP NAME:  SFX CLIP 1
*SOURCE FILE: GUIDE VO
000002  HORROR.COPY.01.MP3               A     C        01:00:00:00 01:00:22:10 01:00:11:23 01:00:34:08
*FROM CLIP NAME:  SFX CLIP 2
*SOURCE FILE: HORROR.COPY.01.MP3
000003  93_HORROR_DRONE.MP3              A     C        01:00:04:15 01:00:08:08 01:00:34:08 01:00:38:01
*FROM CLIP NAME:  SFX CLIP 3
*SOURCE FILE: 93 HORROR DRONE.MP3

ты можешь подать заявку

mlr --skip-comments-with "*" --inidx --ifs ' ' --ocsv --repifs cat inputFile.txt

и имеют

1,2,3,4,5,6,7,8
000001,GUIDE_VO,A,C,12:36:54:21,12:37:06:19,01:00:00:00,01:00:11:23
000002,HORROR.COPY.01.MP3,A,C,01:00:00:00,01:00:22:10,01:00:11:23,01:00:34:08
000003,93_HORROR_DRONE.MP3,A,C,01:00:04:15,01:00:08:08,01:00:34:08,01:00:38:01

mlr - это утилита с открытым исходным кодом, также для Windows, и вы можете запустить ее через приглашение. Последний win exe находится здесь (mlr.exe) https://github.com/johnkerl/miller/releases/tag/5.4.0


1
Привет aborruso, эта команда выводит точный результат, который вы перечислили ниже? Мне интересно узнать, как выяснить, что делать с данными, если так. Я заметил, что название клипа было исключено из результата, который мне понадобится в последнем столбце данных CSV. Спасибо за ваш вклад до сих пор!
Миль

Привет, @Майлз, у тебя много файлов, и для каждого первого ряда у тебя есть что-то вроде «TITLE: Untitled Sequence.01», или у тебя есть один файл с большим количеством заголовков? Если это один файл, не могли бы вы поделиться реальным примером?
aborruso

Первая строка - это только название временной шкалы, которая появляется только один раз при каждом экспорте. это никогда не повторяется. Со строки 2 и далее одни и те же данные повторяются в том же стиле для каждых 3 строк. Поэтому мне нужно, чтобы строки 2,3 и 4 были проанализированы в первом ряду ячеек, разделенных на столбцы, которые я отображал на скриншоте. Но, глядя на результат, который вы создали в своем ответе, я вижу, что это в значительной степени сделано. Осталось включить только названия клипов "SFX CLIP 1" и т. Д.
Myles

Я всегда могу заставить второй процесс заменить 1,2,3,4,5,6,7,8 именами столбцов, которые мне нужны, чтобы это не было проблемой. Это просто имена клипов, которые также должны войти.
Myles

Если я не ошибаюсь, часть, которая идет --skip-comments-with "*", пропускает всю запись *FROM CLIP NAME: SFX CLIP 1, это правильно? Таким образом, это пропускает само название клипа SFX CLIP 1в результате?
Миль
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.