четверг, 25 февраля 2010 г.

[prog.humour] Как взять первую часть файла в Windows с помощью подручных средств?

Вчера вечером пытался решить простенькую задачку: на нетбуке из большого (порядка 8Gb) eMule-овского временного файла нужно было взять первых 100Mb и записать на флэшку, чтобы сделать preview на телевизоре (сам нетбук 1020p видео не тянет в принципе). Сделать это нужно было с помощью подручных средств – штатных утилит Windows Vista да Far с Rar-ом. Никаких средств разработки на нетбуке не было. А аналогов Unix-овых head и tail в Windows, насколько мне известно, нет.

Первая мысль была поискать в Интернете какой-нибудь готовый splitter для файлов. Но это мне показалось неспортивным. Поэтому обошелся rar-ом. Сначала запускается архивация временного файла в многотомный архив с нулевым сжатием (rar a –m0 –v100m), которая прерывается после формирования первой части архива. Затем из этой первой части на флэшку распаковывается то, что там оказалось – как раз приблизительно 100Mb из большого временного файла :)

Голь, как водится, на выдумки хитра. На том и стоим, а точнее – лисапеды придумываем ;)

Но интересно, можно ли было сделать тоже самое при наличии Windows Vista и Far-а по-другому?

16 комментариев:

Left комментирует...

bat-ники это прошлый век
наш выбор - это JScript, который есть на всех виндах.

Единственно Верный (TM) язык JavaScript позволяет реализовать сколь угодно сложную логику.
А доступ к большинству COM-обьектов даёт офигенную свободу действий.

Путём небольших извращений на нём можно работать и с бинарниками тоже:

http://www.motobit.com/tips/detpg_read-write-binary-files/

Моё ИМХО: батники зло, поскольку они всё равно не кросплатформенны да и к тому же абсолютно нечитабельны и неотлаживаемы.

PS да, а если нужен UI - есть HTA, который тоже есть на всех без исключения виндах.

eao197 комментирует...

Ну я, в принципе, вообще без батников обошелся -- там всего-то две команды нужно выполнить.

>http://www.motobit.com/tips/detpg_read-write-binary-files/

Ой, чой-то мне захотелось на все свои компьютеры ставить Ruby. Там все как-то попроще ;)

Dmitry Vyukov комментирует...

Да, остроумно ;)
Другой способ - всё же воспользоваться юниксовыми head и tail, которые всё же есть в винде.
Если нет, то идём Control Panel -> Programs and Features -> Turn Windows Features on or off, ставим себе Subsystem for UNIX-based Applications и радуемся юниксовым тулзам и тулчайну (cc/gcc, pthread.h, signal.h, stdint.h и всё такое)

eao197 комментирует...

>Другой способ - всё же воспользоваться юниксовыми head и tail,

Не, не нашел я в своей русской Windows Vista Business такой подсистемы :(

Dmitry Vyukov комментирует...

Вот! Недоплатил за нормальную версию! :)
Она доступна в серверных ОС и в клиентских типа Ultimate и Enterprise:
http://en.wikipedia.org/wiki/Interix
Ну тогда просто Cygwin ;)

Left комментирует...

не знаю, мне в плане "языка для скриптов автоматизации" не понравился даже питон - слишком сложен. Не нужны такому языку классы и прочие навороты, ИМХО. JavaScript наше всё :)

eao197 комментирует...

>Вот! Недоплатил за нормальную версию! :)

Вот какое фуфло мне, оказывается, впарил HP вместе с нетбуком! :)))

eao197 комментирует...

2Left:

Ну драться по этому поводу мы не будем :)

В шатной поставке Ruby есть такая классная вещь, как интерактивная среда -- irb. Я в ней как-то похожую задачу (только там, кажется нужно было еще с именами файлов манипулировать) решал -- все вылилось в 7-8 строк кода прямо в irb. И после выполнения каждой из строк я видел ее результат. Было здорово.

Dmitry Vyukov комментирует...

> И после выполнения каждой из строк я видел ее результат. Было здорово.

Чо, прям превью видео показал?

eao197 комментирует...

>Чо, прям превью видео показал?

Ох, ё! Как же я сразу-то не додумался! :(

:)))

По большому счету -- как нефиг делать -- сповнуть из irb TheKMPlayer/SMPlayer/VLC и всех делов. А особые извращенцы, через Win32ole могли бы какой-нибудь WindowsMediaPlayer запустить :)

Quaker комментирует...

А аналогов Unix-овых head и tail в Windows, насколько мне известно, нет.
Все уже портировано:
1) http://sourceforge.net/projects/tailforwin32/files/
2) http://gnuwin32.sourceforge.net/packages/coreutils.htm

eao197 комментирует...

>Все уже портировано

Ну, это-то я знаю, но интересно было сделать не качая ничего :)

Кстати, cygwin мне больше нравится. По крайней мере tar из cygwin-а с tarball-ом SObjectizer-а справляется в лет. А вот из gnuwin32 -- нет.

yudincev комментирует...

Ограничения на плагины к Far в условиях задачи нет? :) Если так, то задача решается с помощью плагина Surgeon.

eao197 комментирует...

2yudincev: спасибо, будем знать теперь про этот плагин.

night beast комментирует...

в тотал-командере есть возможность разбить файл.
для фара тоже можно такой плугин поискать...

eao197 комментирует...

2night beast:

>в тотал-командере есть возможность разбить файл.

Не смог заставить себя пользоваться тоталом. Но раз в нем такая возможность есть -- это хорошо.