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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.01.2009, 07:16   #1  
offenmeier is offline
offenmeier
HAI; CAN HAS STDIO?
Аватар для offenmeier
Соотечественники
 
77 / 36 (2) +++
Регистрация: 17.02.2005
Адрес: Auckland, NZ
Post ASCII NULL
хелло.

задача: сгенерировать текстовый файл из аксапты (2009 SP1), причем файл должен иметь специальную последовательность символов в самом начале. эта последовательность состоит из набора непечатных ASCII символов, а главное, в ней 60 символов ASCII NULL.

проблема: перебрал разные варианты, но не могу записать символ ASCII NULL в файл. просто ничего не пишется если я передаю в fileio.write num2char(hex2int("00")), или пишется символ "0", если я использую fileio.write(0), что можно было ожидать на самом деле. смотрел образец в hex-редакторе, там 60 символов с кодом "00".

вопрос: как же их писать в текстовый файл?

ответ: пока писал сообщение, разобрался с проблемой и решил уже не стирать. в результате я сначала создаю Binary, формирую в нем заголовок, записываю Binary в BinData, а его, в свою очередь, в файл, затем уже открываю его как TextIO и пишу нужную информацию. спасибо за внимание
__________________
our sharp bitter vitriol is not that of the vulgar.
Старый 23.01.2009, 09:19   #2  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
а если writeRaw(num2char(0)) ?
Старый 23.01.2009, 11:07   #3  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
может BinaryIO надо использовать
Старый 28.01.2009, 07:06   #4  
offenmeier is offline
offenmeier
HAI; CAN HAS STDIO?
Аватар для offenmeier
Соотечественники
 
77 / 36 (2) +++
Регистрация: 17.02.2005
Адрес: Auckland, NZ
Post
Цитата:
Сообщение от belugin Посмотреть сообщение
а если writeRaw(num2char(0)) ?
это чей такой метод, WriteRaw? если речь идет про TextIo, то нет, не пишет он таким образом ASCII NULL символ. ни WriteRaw, ни WriteChar(0).

а вот если вы про XmlTextWriter, то я еще не пробовал.

зато точно говорю, что BinData + Binary работают:

X++:
    BinData    data = new BinData();
    Binary     myChar = new Binary(98);
    ;

    myChar.byte(0, hex2int("98"));
    myChar.byte(1, hex2int("01"));
    myChar.byte(2, hex2int("43"));
    myChar.byte(3, hex2int("50"));
    myChar.byte(4, hex2int("5F"));
    myChar.byte(5, hex2int("46"));
    myChar.byte(6, hex2int("53"));
    myChar.byte(7, hex2int("50"));
    myChar.byte(8, hex2int("53"));
    myChar.byte(9, hex2int("5F"));
    myChar.byte(10, hex2int("42"));
    myChar.byte(11, hex2int("4F"));
    myChar.byte(12, hex2int("4F"));
    myChar.byte(13, hex2int("4B"));

    data.setBinaryData(myChar);

    data.saveFile("C:\\temp\\temp.txt");
получаем аккуратный файл с нужным заголовком. открываем TextIo или другой Io и пишем, что надо.
__________________
our sharp bitter vitriol is not that of the vulgar.
Старый 28.01.2009, 08:12   #5  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Недавно решал подобную задачу, нужно было размер файла изменить. Используются чистые winapi функции. При этом в файл пишутся те самые нули. Может пригодится :
X++:
    int handle;
    ;
    handle = WinAPI::CreateFile("C:\\Temp\\AX.TXT", #CREATE_ALWAYS, #GENERIC_WRITE);
    WinAPI::SetFilePointer(handle, 60, 2);
    WinAPI::SetEndOfFile(handle);
    WinAPI::CloseHandle(handle);
X++:
static int SetFilePointer(int _handle, int _lDistanceToMove, int _dwMoveMethod )
{
    DLL         _winApiDLL      = new DLL('KERNEL32');
    DLLFunction _SetFilePointer    = new DLLFunction(_winApiDLL, 'SetFilePointer');

    _SetFilePointer.returns(ExtTypes::DWord);
    _SetFilePointer.arg(ExtTypes::DWord,
                     ExtTypes::DWord,
                     ExtTypes::DWord,
                     ExtTypes::DWord);
    return _SetFilePointer.call(_handle, _lDistanceToMove, 0, _dwMoveMethod);
}

static int SetEndOfFile(int _handle )
{
    DLL         _winApiDLL      = new DLL('KERNEL32');
    DLLFunction _SetEndOfFile    = new DLLFunction(_winApiDLL, 'SetEndOfFile');

    _SetEndOfFile.returns(ExtTypes::DWord);
    _SetEndOfFile.arg(ExtTypes::DWord);
    return _SetEndOfFile.call(_handle);
}

Последний раз редактировалось Eldar9x; 28.01.2009 в 08:24.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Экспорт / сохранение отчета в ASCII файл valentino DAX: Программирование 7 18.02.2008 11:57
C# and AX Development: Using the COM Business Connector in C#, the easy way (AX/Axapta) Blog bot DAX Blogs 0 15.12.2007 20:35
Ошибка SQL в модуле "Расчеты с персоналом" Карбофос DAX: Функционал 5 02.08.2002 12:44
Ошибка SQL в модуле "Расчеты с персоналом" Карбофос DAX: Программирование 0 31.07.2002 17:20
условие WHERE SomeField == NULL Alexey DAX: Программирование 7 23.01.2002 16:42

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

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

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