Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Можно ли из строки шестнадцатиричного формата получить эксель файл ?

Ответить
Настройки темы
VBS/WSH/JS - [решено] Можно ли из строки шестнадцатиричного формата получить эксель файл ?

Пользователь


Сообщения: 79
Благодарности: 2

Профиль | Отправить PM | Цитировать


Всем доброго времени суток.

У меня есть большая строка (8000 символов; это поле BLOB в БД Оракл) в шестнадцатеричном формате, которая в действительности является файлом формата .xlsx. Мне нужно эту строку "превратить" в физический файл экселя на диске. Т.е., этот файл "упакован" в BLOB в Оракле. Мне нужно его "распаковать".

Подскажите, пожалуйста, можно ли это сделать средствами vbscript? Нашел, что на vbs есть возможности для взаимодействия с шестнадцатеричными значениями, но не уверен, что это то, что мне нужно. Заранее благодарен.

Отправлено: 19:47, 25-11-2017

 

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Burning Hell, Вам нужен ADODB. И надо быть уверенным, что содержимое поля типа BLOB представляет собой точную бинарную копию файла .xlsx.

Отправлено: 20:53, 25-11-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата Burning Hell:
Подскажите, пожалуйста, можно ли это сделать средствами vbscript? »
нет - vbscript не умеет работать с бинарными файлами

Отправлено: 18:02, 26-11-2017 | #3


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата Busla:
vbscript не умеет работать с бинарными файлами »
Busla, это не совсем так. Частично умеет, хотя и не с такой лёгкостью, что большие ЯВУ, имеющие возможность не только последовательного, но и прямого доступа к содержимому файла.

Отправлено: 18:14, 26-11-2017 | #4


Пользователь


Сообщения: 79
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Iska:
Вам нужен ADODB »
так в VBScript эта технология есть, разве нет?

Отправлено: 21:06, 26-11-2017 | #5


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Цитата Iska:
И надо быть уверенным, что содержимое поля типа BLOB представляет собой точную бинарную копию файла .xlsx.
.xlsx - это по сути ZIP-архив, содежимым которого являются набор xml файлов, так что теоретически, проверив первые четыре байта (а речь ведь, надо понимать, о hex'е) и сверив их с сигнатурой ZIP, можно понять что в поле БД. НО! ADODB лучше не трогать, ибо эта зараза данные целиком грузит в память, лучше использовать нечто легковесное, что-то вроде SAPI.SpFileStream.
Цитата Busla:
нет - vbscript не умеет работать с бинарными файлами
Спасибо, улыбнули. WSH всегда умел работать с бинарниками.

Отправлено: 21:16, 26-11-2017 | #6


Пользователь


Сообщения: 79
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата greg zakharov:
сверив их с сигнатурой ZIP, можно понять что в поле БД »
У меня есть более простой способ понять, что там - в соседнем поле лежит имя файла с его расширением. Так что это не проблема.

Цитата greg zakharov:
SAPI.SpFileStream »
Есть ли где-то рабочий пример такой штуки с комментариями как ее юзать?

Отправлено: 21:32, 26-11-2017 | #7


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата Burning Hell:
так в VBScript эта технология есть, разве нет? »
Неа, нету . Эта технология имеет отношение к VBScript только тем, что может использоваться последним посредством Automation. В Вашем случае требуется драйвер для доступа к базам данных Oracle.

Цитата greg zakharov:
ADODB лучше не трогать, ибо эта зараза данные целиком грузит в память, лучше использовать нечто легковесное, что-то вроде SAPI.SpFileStream. »
Если верить автору:
Цитата Burning Hell:
большая строка (8000 символов; это поле BLOB в БД Оракл) в шестнадцатеричном формате »
— то и так сойдёт. Если, конечно, верить. У меня пустой лист .xlsx занимает почти семь килобайт.


Цитата Burning Hell:
У меня есть более простой способ понять, что там - в соседнем поле лежит имя файла с его расширением. Так что это не проблема. »
Окажется проблемой, если там не то, что Вы думаете.

Цитата Burning Hell:
Есть ли где-то рабочий пример такой штуки с комментариями как ее юзать? »
Рабочий пример кода с «ADODB.Stream» («SAPI.SpFileStream» Вам понадобится, когда объём поля будет порядка сотен мегабайт) Вы можете взять здесь: how to store a BLOB data on a windows file using vbscript?.

Ах, да, комментарии… Всё достаточно просто: подключаетесь к базе Oracle, выполняете SQL-запрос, выделяя потребную запись, значение потребного поля, если оно не пустое, передаёте функции (которая там тупо используется как процедура) вместе с именем потребного файла, в функции создаётся объект потока, в него пишется байтовый массив, полученный из поля, затем содержимое потока записывается в файл на диске.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:50, 26-11-2017 | #8


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата greg zakharov:
WSH всегда умел работать с бинарниками. »
вас не затруднит привести фрагмент соответствующего кода?

Отправлено: 23:28, 26-11-2017 | #9


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата Busla:
вас не затруднит привести фрагмент соответствующего кода? »
Такой вариант Вас устроит? Или там же чуть ниже более расширенный?

Отправлено: 23:43, 26-11-2017 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Можно ли из строки шестнадцатиричного формата получить эксель файл ?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Как создать BMP файл из командной строки. Как работать с графикой из командной строки MKN Хочу все знать 22 23-03-2016 11:03
FreeBSD - Можно ли отредактировать файл на HDD из LiveCD FreeBSD?.. znak-ognya Общий по FreeBSD 5 29-08-2015 00:28
Доступ - Как получить права на файл или реестр из командной строки и вернуть всё как было hb860 Microsoft Windows 7 9 25-02-2013 14:03
CMD/BAT - Как из for получить значение из одной строки смещаясь на 1 при каждом проходе Voodooman Скриптовые языки администрирования Windows 18 28-08-2011 05:54
CMD/BAT - [решено] Можно ли записывать голос из командной строки? Alex.Devil.LX Скриптовые языки администрирования Windows 1 28-07-2011 23:08




 
Переход