1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Пожалуйста, внимательно прочитайте правила раздела.
  3. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

Soft Нужна программа для "нарезки" файлов по заголовку

Тема в разделе "Hard & Soft", создана пользователем Talking_Sword, 12 ноя 2021.

  1. Talking_Sword

    Talking_Sword

    Регистрация:
    2 авг 2013
    Сообщения:
    470
    Задача: есть файл, который состоит из нескольких склееных файлов (примерно так, как если бы их копировали коммандой copy /b). Файлы одинакового типа и имеют заголовок, по которому однозначно можно определить начало файла. Нужна программа, которая бы могла "разрезать" такие файлы по найденным заголовкам, то есть, заголовок воспринимается как начало нового файла. Важно, чтобы можно было самому задать последовательность байт, которая будет определяться как заголовок.

    Какая программа может выполнить такую задачу? По идее, подобный функционал есть в GSplit, но у меня почему-то ничего не получается - программа сразу же останавливает процесс, пишет, якобы отменено пользователем.
     
  2. Helmut Herr Mannelig

    Helmut

    Переводчик

    Регистрация:
    18 мар 2008
    Сообщения:
    7.083
    Если я правильно понял задачу, то она решается простым .bat файлом.
     
  3. Talking_Sword

    Talking_Sword

    Регистрация:
    2 авг 2013
    Сообщения:
    470
    Как?
     
  4. Helmut Herr Mannelig

    Helmut

    Переводчик

    Регистрация:
    18 мар 2008
    Сообщения:
    7.083
    Передаешь аргументом имя файла и нужный заголовок, читаешь содержимое файла в переменную, запускаешь в цикле регулярку с поиском нужной последовательности и сохраняешь результаты в файлы с именами, например, исходного файла + номер итерации.

    ЗЫ: навскидку:
    Код:
    #!/bin/bash
    FILE=$(< $1)
    FRAGS=$(echo $FILE | tr $2 "\n")
    I=0
    for FRAG in $FRAGS
    do
      echo $FRAG >> "$2_$I"
      let I=$I+1
    done
    
    Это так, на коленке. Можешь сделать то же самое на любом подходящем тебе языке. Ну и сделать другую обработку конца строки, если надо.
     
    Последнее редактирование: 12 ноя 2021
  5. Goblinit

    Goblinit

    Регистрация:
    18 мар 2011
    Сообщения:
    4.418
    #!/bin/bash

    имя команды или файла указано неправильно

    Screenshot from 2021-11-12 23-41-20.png
     
    Последнее редактирование: 12 ноя 2021
  6. Talking_Sword

    Talking_Sword

    Регистрация:
    2 авг 2013
    Сообщения:
    470
    Это для Linux. Но мне нужно для Windows.
    И да интересует все-таки какая-нибудь готовая программа, если бы я смог написать сам, то я бы и не спрашивал.
     
  7. Helmut Herr Mannelig

    Helmut

    Переводчик

    Регистрация:
    18 мар 2008
    Сообщения:
    7.083
    Это просто для примера. Что было под рукой - на том и накидал. На cmd для венды ничто не мешает то же самое сделать.

    Я сомневаюсь, чтобы кто-нибудь стал заморачиваться и делать отдельную программу для того, что делается пятью командами. Хотя... кто может быть уверен в наше время. Если такая программа и есть, то она весит 20 Гб, требует 32 Гб памяти и идет только под вендой 11.
     
    Последнее редактирование: 13 ноя 2021
    kl-13 нравится это.
  8. oFF_rus .

    oFF_rus

    Legacy

    Регистрация:
    25 фев 2007
    Сообщения:
    2.164
    Скрипт для quickbms (Luigi Auriemma)

    Код:
    endian little
    
    set startPos long -1
    set endPos long -1
    set extrSize long 0
    
    for
      findloc endPos binary "\x3C\x3F\x78\x6D\x6C" 0 -2
    
      if endPos != -2
        if startPos != -1
          set size long endPos
          math size - startPos
          log "" startPos size
        endif
        goto endPos 0
        SavePos startPos
        goto 1 0 SEEK_CUR
      else
        if startPos != -1
          goto 0 0 SEEK_END
          SavePos endPos
          set size long endPos
          math size - startPos
          log "" startPos size
        endif
        cleanexit
      endif
    next
    Заменить в стоке с findloc строку поиска на свою (сейчас там hex-коды строки "<?xml" на которой я тестировал).

    Запуск через командную строку (через GUI не пробовал):

    Код:
    quickbms.exe script.bms bigfile.bin targetdir
    
     
    Talking_Sword и bvedargh нравится это.
  9. Talking_Sword

    Talking_Sword

    Регистрация:
    2 авг 2013
    Сообщения:
    470
    Я не уверен, какие в Windows NT есть программы для поиска последовательностей байт в файлах. Я знаю только findstr, но умеет ли она работать с двоичными файлами? Ну и в любом случае, это все равно было бы гораздо менее удобно в использовании. И да, я не понимаю регулярные выражения.
    Ну я не имел программу чисто для этого. Я думал, может есть программа, которая среди прочих функций умеет делать и это.

    @oFF_rus, спасибо. На худой конец можно использовать и это. А можно ли изменить нумерацию файлов на десятичную? Можно ли, чтобы к имени выходных файлов в начале добавляось имя входного?
     
  10. oFF_rus .

    oFF_rus

    Legacy

    Регистрация:
    25 фев 2007
    Сообщения:
    2.164
    По нумерации, например так:

    Код:
        -N     decimal names for files without a name: 0.dat instead of 00000000.dat
    
    По добавлению имени файла, например так:

    Код:
        -d     automatically create an additional output folder with the name of the
               input folder and file processed, eg. models/mychar/mychar.arc/*,
               -d works also if input and output folders are the same (rename folder)
    
    Будет подпапка, в которую лягут все эти нумерованные файлы.

    Можно напрограммировать собирание имени файла для каждого из выгружаемых, но сложновато выходит (навскидку не вижу как в скрипте получить доступ к имени входного файла, вижу только возможность передать произвольную строку снаружи дополнительным параметром)

    Код:
    set filenumber long -1
    for
    ...
          math filenumber + 1
          set filename string quickbms_arg1
          string filename + filenumber
          string filename + ".*"
    
          log filename startPos size
    
    
    строка запуска:

    Код:
    quickbms.exe -a something script.bms bigfile.bin targetdir
    
    получится что-то такое:
    Код:
      00ba6cf8 1394239    something9.dat
      00cfb337 987213     something10.dat
      00dec384 1157705    something11.dat
    
     
    Talking_Sword, Колючий, kl-13 и ещё 1-му нравится это.
  11. Goblinit

    Goblinit

    Регистрация:
    18 мар 2011
    Сообщения:
    4.418
    Для полноты картины осталось кому-то написать скрипт на powershell. Но, по-моему, это не нужно.

    Есть ведь dragon unpacker. в нём есть hyperripper. попробуйте?
     
    Talking_Sword нравится это.
  12. Talking_Sword

    Talking_Sword

    Регистрация:
    2 авг 2013
    Сообщения:
    470
    Черт возьми, а про это я не подумал. Я что-то "зациклился" на том, чтобы можно было ввести готовую последовательность байт. А ведь есть программа, которая "знает" заголовки распространенных форматов файлов.

    Зачем только было делать эти кровоподтеки в окне программы. Но кажется есть программы для изменения ресурсов в исполняемых файлах, можно попробовать исправить.
     
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление