JScript: прочитать файл в бинарном виде

Создание, использование компонентов ActiveX
Ю_рий
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 02.07.2006 (Вс) 6:12

JScript: прочитать файл в бинарном виде

Сообщение Ю_рий » 07.06.2008 (Сб) 20:49

Мне нужно прочитать файл в бинарном виде. Я пытался это сделать так:

<script>
function f_a(){
fs=new ActiveXObject("Scripting.FileSystemObject")
f=fs.OpenTextFile("C:\\W\\qq.gif",1);
x=f.readAll();
f.Close();
te_xt=""
for(i=0;i<x.length;i=i+1){
y=x.charCodeAt(i)
y=y.toString(16)
te_xt+=y+" "}
alert(te_xt)}
</script>
<input type="button" value="f_a" onClick="f_a()">

Этот скрипт правильно работает, только не для любого кода байта. Вот, что нашёл на эту тему в интернете:
==============================================
результат будет правильным, только если значение этого байта не превосходит 0x7f - JScript работает со строками в юникоде и функций для определения ASCII-кода символа в нём нет.
Но если то же самое сделать на VBScript:

Byte=Asc(f.Read(1))

то всё работает правильно (правда, если перед этим не было вызовов SetLocale).
Т.е. можно на VBScript написать функцию ReadByte() и затем вызывать её из JScript-сценария:

<SCRIPT language='VBScript'>
Function ReadByte(File)
ReadByte=Asc(File.Read(1))
End Function
</SCRIPT>
==============================================
К сожалению, я не знаком с VBscript, поэтому сам не разберусь. Нужно прочитать файл в бинарном виде и передать результаты чтения для дальнейшей обработки в переменную в Javascript

Подскажите, пожалуйста, как это можно сделать.

И вот, ещё нашёл:
==============================================
Наверно можно обойтись и одним JScript'ом, если открывать файл как юникодовский и потом отрезать лишний байт. Вот это вроде бы работает.

path="C:\\test\\test.dbf"; // Путь к файлу.
n=12; // Номер байта (считая с нуля).

fso=new ActiveXObject("Scripting.FileSystemObject");
with (fso.OpenTextFile(path, 1, false, true))
Skip(n>>>1), text=Read(1), Close();

byte=(text.charCodeAt(0) & 0xff<<8*(n&1)) >>> 8*(n&1);

WScript.Echo(byte);
-----------------------------
Для вывода результата в 16-ричном виде заменил последнюю строку на
WScript.Echo(byte.toString(0x10).toUpperCase());
==============================================
P.S. Это работает тоже не совсем так, но здесь дана идея открывать файл как юникодовский и отрезать байт.

Вернуться в Компоненты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList