AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.09.2011, 01:13   #1  
Predatore is offline
Predatore
Участник
 
163 / 17 (1) ++
Регистрация: 29.09.2010
Доброго времени суток!
Я никак не могу разобраться, как читать BLOB побитово? Т.е. в принципе с сутью я разобрался, а вот с практикой что-то пока никак.
Мне нужно пропустить в файле первые 18 бит, а потом 2 раза прочитать по 4 бита в Integer.
Я создаю InStream объект StreamInObj. Потом делаю так:
Код:
mFile.OPEN (FilePath);
mFile.CREATEINSTREAM (StreamInObj);

StreamInObj.READ(temp, 18);  //temp просто текстовая переменная, что бы "пропустить" в неё 18 байт
StreamInObj.READ(x, 4);      //А тут пытаюсь прочитать 4 байта в переменную x типа Integer
StreamInObj.READ(y, 4);

mFile.CLOSE;
Только вот ничего у меня не выходит Что я делаю не так? Или ещё лучше, как мне решить мою задачу?
Старый 13.09.2011, 01:46   #2  
Predatore is offline
Predatore
Участник
 
163 / 17 (1) ++
Регистрация: 29.09.2010
Там вначале, опечатка, а я уже не могу отредактировать сообщение. Там BLOB, а нужно файл. Я просто в начале хотел BLOB читать, а потом нашёл на форуме темы, где пишут, что в блобе данные могут храниться не так как в файле. Поэтому решил всё же работать с файлом, хотя принцип судя по всему и там и там одинаковый.
Старый 13.09.2011, 09:38   #3  
Alex Che is offline
Alex Che
Участник
 
74 / 10 (1) +
Регистрация: 04.04.2006
mFile.TEXTMODE(FALSE) не помогает?
Старый 13.09.2011, 09:52   #4  
Alterant is offline
Alterant
Участник
 
378 / 10 (1) +
Регистрация: 31.03.2004
Цитата:
Сообщение от Predatore Посмотреть сообщение
Я никак не могу разобраться, как читать BLOB побитово? Мне нужно пропустить в файле первые 18 бит, а потом 2 раза прочитать по 4 бита в Integer.
...
Код:
StreamInObj.READ(temp, 18); //temp просто текстовая переменная, что бы "пропустить" в неё 18 байт
StreamInObj.READ(x, 4); //А тут пытаюсь прочитать 4 байта в переменную x типа Integer
Побитно или все=таки побайтно?
Старый 13.09.2011, 10:11   #5  
Alex Che is offline
Alex Che
Участник
 
74 / 10 (1) +
Регистрация: 04.04.2006
Если всё-таки "побайтно", то можно не указывать длину для целых, и так читается 4 байта. Кстати, с какой версии Nav появилась длина? У меня в 3.1 нет.
Старый 13.09.2011, 10:30   #6  
Predatore is offline
Predatore
Участник
 
163 / 17 (1) ++
Регистрация: 29.09.2010
Конечно же побайтно. Весь пост, сплошные опечатки, видимо потому что спать надо в такое время, а не вопросы на форуме задавать

mFile.TEXTMODE(FALSE) - попробую.

В Нав 4.0 у меня есть длина.

А ещё есть мысль попробовать 18 байт "пропускать" не в текстовую переменную, а в массив чаров, есть подозрение, что что-то не так с текстом.
Старый 13.09.2011, 11:00   #7  
Predatore is offline
Predatore
Участник
 
163 / 17 (1) ++
Регистрация: 29.09.2010
mFile.TEXTMODE(FALSE) не помогает

В текстовую переменную видимо не правильно читать, по ходу в неё вообще чтения не происходит, т.к. сколько бы я в неё не прочитал, дальнейшее чтение в инты даёт всё время один и тот же результат.

А в массив чаров у меня меня почему-то не получается читать, даже скомпилить не даёт, пишет "Размерности массива должны совпадать", даже если я не указываю сколько читать, по хелпу в таком случае он должен прочитать столько сколько занимает переменная.

Сейчас суть проблемы в том, что я не могу сдвинуться на 18 байт, т.к. читая в инты, я могу сдвинуться только на 16 или на 20 А в чары чиать не получается
Старый 13.09.2011, 12:27   #8  
Alterant is offline
Alterant
Участник
 
378 / 10 (1) +
Регистрация: 31.03.2004
Цитата:
Сообщение от Predatore Посмотреть сообщение
mFile.TEXTMODE(FALSE) не помогает

В текстовую переменную видимо не правильно читать, по ходу в неё вообще чтения не происходит, т.к. сколько бы я в неё не прочитал, дальнейшее чтение в инты даёт всё время один и тот же результат.

А в массив чаров у меня меня почему-то не получается читать, даже скомпилить не даёт, пишет "Размерности массива должны совпадать", даже если я не указываю сколько читать, по хелпу в таком случае он должен прочитать столько сколько занимает переменная.

Сейчас суть проблемы в том, что я не могу сдвинуться на 18 байт, т.к. читая в инты, я могу сдвинуться только на 16 или на 20 А в чары чиать не получается
Читайте по одному чару в бинарном режиме ( mFile.TEXTMODE(FALSE) ) - это побайтное чтение. Просто первые 18 байт пропустите в обработке, а остальные 4-ками сконвертируйте в integer. Либо после 18 байт читайте уже integer-ами.
Можно еще попробовать воспользоваться не популярным типом Binary, указав его длину - 18 байт.
Старый 13.09.2011, 14:19   #9  
Kadawrik is offline
Kadawrik
Участник
 
279 / 11 (1) +
Регистрация: 04.11.2010
Цитата:
Сообщение от Predatore Посмотреть сообщение
Только вот ничего у меня не выходит Что я делаю не так? Или ещё лучше, как мне решить мою задачу?
Вы не могли бы скинуть свой текстовый файл (нсли это, конечно, не коммерческая тайна)? Просто хотелось бы самой посмотреть, что там не так происходит и почему. (как раз недавно имела дело с обработкой, которая считывает из текстового файла и разбивает текст на отдельные байты/символы)
Старый 13.09.2011, 14:38   #10  
Predatore is offline
Predatore
Участник
 
163 / 17 (1) ++
Регистрация: 29.09.2010
Цитата:
Сообщение от Alterant Посмотреть сообщение
Цитата:
Сообщение от Predatore Посмотреть сообщение
mFile.TEXTMODE(FALSE) не помогает

В текстовую переменную видимо не правильно читать, по ходу в неё вообще чтения не происходит, т.к. сколько бы я в неё не прочитал, дальнейшее чтение в инты даёт всё время один и тот же результат.

А в массив чаров у меня меня почему-то не получается читать, даже скомпилить не даёт, пишет "Размерности массива должны совпадать", даже если я не указываю сколько читать, по хелпу в таком случае он должен прочитать столько сколько занимает переменная.

Сейчас суть проблемы в том, что я не могу сдвинуться на 18 байт, т.к. читая в инты, я могу сдвинуться только на 16 или на 20 А в чары чиать не получается
Читайте по одному чару в бинарном режиме ( mFile.TEXTMODE(FALSE) ) - это побайтное чтение. Просто первые 18 байт пропустите в обработке, а остальные 4-ками сконвертируйте в integer. Либо после 18 байт читайте уже integer-ами.
Можно еще попробовать воспользоваться не популярным типом Binary, указав его длину - 18 байт.
Спасибо! У меня изначально не получалось даже и по одному чару читать. Но когда я удалил старый чар и создал новый, то вдруг всё заработало!
Старый 13.09.2011, 16:13   #11  
Alterant is offline
Alterant
Участник
 
378 / 10 (1) +
Регистрация: 31.03.2004
Цитата:
Сообщение от Predatore Посмотреть сообщение
Спасибо! У меня изначально не получалось даже и по одному чару читать. Но когда я удалил старый чар и создал новый, то вдруг всё заработало!
Подозреваю, что "старый" чар у вас был массивом, хоть и размерностью 1.
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 06:36.