05.10.2007, 11:36 | #1 |
MCTS
|
Число из файла
Есть файл. Загружаем его в BinData:
X++: BinData binData; ; binData = new BinData(); if (binData.loadFile(fileName)) //only works if file not locked { _salesLine.Jls_MFJFile = binData.getData(); _salesLine.Jls_Width = binData } |
|
08.11.2007, 13:51 | #2 |
Участник
|
X++: static void Job32(Args _args) { BinData binData; container c; anytype b; str s,ss; ; binData = new BinData(); if (binData.loadFile('C:\\tst.txt')) //only works if file not locked { // Если файл текстовый, то можно так s = bindata.getStrData(); // Если данные не в текстовом формате c = bindata.getData(); ss = bindata::dataToString(c); } binData.finalize(); print s; print ss; pause; } X++: 9 8 7 99 66 значение ss = "3 9 20 3 8 20 3 7 0d 0a 3 9 3 9 20 3 6 3 6" 3 - как я понимаю идет перед любым значением 20 - пробел 0d 0a - перевод строки |
|
08.11.2007, 14:22 | #3 |
MCTS
|
так на самом деле выдаются Hex значения реальных чисел. Пришлось бы еще анализом строки и переводом чисел заниматься. Намного легче описать readFile. Правда, влом было описывать функции позиционирования в файле. Поэтому делаю readFile пока не наткнусь на нужный offset в файле.
X++: client server static int ReadFile( int _hFile, int _nNumberOfBytesToRead ) { DLL _winApiDLL = new DLL('KERNEL32'); DLLFunction _readFile = new DLLFunction(_winApiDLL, 'ReadFile'); Binary _data = new Binary(_nNumberOfBytesToRead); Binary _data2 = new Binary(0x4); int _ret; ; _readFile.returns(ExtTypes::DWord); _readFile.arg( ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::DWord); _ret =_readFile.call( _hFile, _data, _nNumberOfBytesToRead, _data2, 0); if (!_ret) error(winApi::formatMessage(winApi::getLastError())); return _data.dWord(0); } Последний раз редактировалось Eldar9x; 08.11.2007 в 14:31. |
|
08.11.2007, 15:28 | #4 |
Участник
|
Цитата:
В случае Binary, как это сделать, понятно. Но как с BinData?
|
|