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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.09.2010, 17:10   #1  
ruslan_as is offline
ruslan_as
Участник
 
10 / 10 (1) +
Регистрация: 21.03.2010
? Как заменить "\" на "\\" в пути
есть таблица ProdDataExchangeWithMes_KBK
в которой поле Customers содержит путь типа "C:\Ax\File"
При открытии/записи файла путь должен быть "C\\Ax\\File"
Как заменить "\" на "\\"

Вот код:

Io fileIo = null;
str rec;
ProdDataExchangeWithMes_KBK prodDataExchangeWithMes;
;



prodDataExchangeWithMes=ProdDataExchangeWithMes_KBK::find();
new FileIOPermission(prodDataExchangeWithMes.Customers,@"W").assert();
fileIo=new TextIo(prodDataExchangeWithMes.Customers, @"W", 1251);

rec = "1;2;3;4;5;";
fileIo.write(rec); \\Здесь ругается - Ошибка времени выполнения Io Объект не инициализирован

Подставляю путь C\\Ax\\File - все работает

Старый 09.09.2010, 17:17   #2  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
\Classes\SysTreeNode\duplicatePathDelimiters

может где и еще есть в более подходящих по смыслу местах
За это сообщение автора поблагодарили: ruslan_as (1).
Старый 09.09.2010, 17:36   #3  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Используйте класс AsciiIo:

X++:
void AsciiIoExample()
{
    AsciiIo asciiIo;
    container con;
    FileIoPermission perm;
 
    #define.ExampleFile(@"c:\test.txt")
    #define.ExampleOpenMode("r")
 
    ;
    
    // The AsciiIO.new method runs under code access permission.
    perm = new FileIoPermission(#ExampleFile, #ExampleOpenMode);
    if (perm == null)
    {
        return;
    }
 
    // Code access permission scope starts here.
     perm.assert();
 
    // BP deviation documented.
     asciiIo = new AsciiIo(#ExampleFile, #ExampleOpenMode);
    if (asciiIo != null)
    {
          con = asciiIo.read();
    }
    // Closes the code access permission scope.
    CodeAccessPermission::revertAssert();
}
__________________
AXIOMA

Последний раз редактировалось kornix; 09.09.2010 в 18:03.
За это сообщение автора поблагодарили: ruslan_as (1).
Старый 09.09.2010, 18:09   #4  
ruslan_as is offline
ruslan_as
Участник
 
10 / 10 (1) +
Регистрация: 21.03.2010
Премного благодарен - Буду разбираться.
Старый 10.09.2010, 09:23   #5  
ruslan_as is offline
ruslan_as
Участник
 
10 / 10 (1) +
Регистрация: 21.03.2010
>>kornix
asciiIo.write(rec); - Объект AsciiIo не инициализирован.
В чем ошибка?
Вот код:


X++:
AsciiIo asciiIo;
    str rec;


    #define.ExampleFile(@"c:\test.txt")
    #define.ExampleOpenMode("w")

    ;


    perm = new FileIoPermission(#ExampleFile, #ExampleOpenMode);
    if (perm == null)
    {
        return;
    }
     perm.assert();

     asciiIo = new AsciiIo(#ExampleFile, #ExampleOpenMode);
     rec    = "1;2;3;4;5;";
     asciiIo.write(rec);

Последний раз редактировалось ruslan_as; 10.09.2010 в 09:25.
Старый 10.09.2010, 10:26   #6  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
ruslan_as, попробуйте запустить такой job:

X++:
static void Job1(Args _args)
{
    AsciiIo             asciiIo;
    str                 rec;
    FileIoPermission    perm;

    #define.ExampleFile(@"c:\test.txt")
    #define.ExampleOpenMode("w")

    ;


    perm = new FileIoPermission(#ExampleFile, #ExampleOpenMode);
    if (perm == null)
    {
        return;
    }
     perm.assert();

     asciiIo = new AsciiIo(#ExampleFile, #ExampleOpenMode);
     rec    = "1;2;3;4;5;";
     asciiIo.write(rec);

}
Наверно у вас не создан файл C:\test.txt? Если файла не существует, класс asciiIo не инициализируется
Старый 10.09.2010, 11:03   #7  
ruslan_as is offline
ruslan_as
Участник
 
10 / 10 (1) +
Регистрация: 21.03.2010
>>kornix
Job отработал. Спасибо!
Файла небыло, но он создался.
А вот этот же код в моем проэкте действительно без файла не работает.
А мне файлы надо изначально создавать.
ЧТО ДЕЛАТЬ?
Старый 10.09.2010, 11:27   #8  
ruslan_as is offline
ruslan_as
Участник
 
10 / 10 (1) +
Регистрация: 21.03.2010
Все решили:

X++:
void TXTFile()
{
#define.ExampleOpenMode("w")
Io fileIo = null;
str path;
str rec;
FileIoPermission    perm;
ProdDataExchangeWithMes_KBK prodDataExchangeWithMes;


;

 prodDataExchangeWithMes=ProdDataExchangeWithMes_KBK::find();
 path = SysTreeNode::duplicatePathDelimiters(prodDataExchangeWithMes.Customers+'\\test.txt');

 perm = new FileIoPermission(path, #ExampleOpenMode);
  if (perm == null)
  {
        return;
  }

perm.assert();
fileIo = new TextIo(path, #ExampleOpenMode);
     rec    = "1;2;3;4;5;";
     fileIo.write(rec);
}
Старый 10.09.2010, 11:45   #9  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от ruslan_as Посмотреть сообщение
Как заменить "\" на "\\"
отвечаю на вопрос

X++:
FilePath    filePath = @"C:\test.txt";
    ;

    filePath    = Global::strReplace(filePath, '\\', @'\\');

    info(filePath);
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем

Последний раз редактировалось lev; 10.09.2010 в 11:50. Причина: отредактировал код :)
Старый 10.09.2010, 11:53   #10  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от lev Посмотреть сообщение
отвечаю на вопрос

X++:
FilePath    filePath = @"C:\test.txt";
    ;

    filePath    = Global::strReplace(filePath, '\\', '\\' + '\\');

    info(filePath);
не, не стоит вводить дополнительную операцию в куче ('\\' + '\\')
Аксапта не такая умная, чтобы вычислить подобное на этапе компиляции.
В результате будет задействована куча и сборка мусора.

Иногда сложение строк в цикле делают просто чтобы код оформить красиво.
В общем, ребяты - не злоупотребляйте сложением строк.
лучше уж использовать четыре слеша или способ написания строки с @

X++:
FilePath    filePath = @"C:\test.txt";
    ;

    filePath    = Global::strReplace(filePath, @'\', @'\\');

    info(filePath);
__________________
полезное на axForum, github, vk, coub.
Старый 10.09.2010, 11:54   #11  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
добавлю немного к своему примеру

если вдруг вам заранее не известно сколько в тексте слэшов, то можно добавить проверку:
X++:
if (!strScan(filePath, @'\\', 1, strLen(filePath)))
т.е. в итоге код будет выглядеть так:
X++:
FilePath    filePath = @"C:\test.txt";
    ;

    if (!strScan(filePath, @'\\', 1, strLen(filePath)))
        filePath    = Global::strReplace(filePath, @'\', @'\\');

    info(filePath);
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 10.09.2010, 11:54   #12  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
не, не стоит вводить дополнительную операцию в куче ('\\' + '\\')
Аксапта не такая умная, чтобы вычислить подобное на этапе компиляции.
В результате будет задействована куча и сборка мусора.

Иногда сложение строк в цикле делают просто чтобы код оформить красиво.
В общем, ребяты - не злоупотребляйте сложением строк.
лучше уж использовать четыре слеша или способ написания строки с @

X++:
FilePath    filePath = @"C:\test.txt";
    ;

    filePath    = Global::strReplace(filePath, @'\', @'\\');

    info(filePath);
уже исправил себя сам не люблю сложение строк
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: CHESER85 (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблема с "rNumDateInWordConverter" и языком "de" Delfins DAX: Программирование 2 15.04.2010 10:10
Галка "Закрыто" на таблице "В наличии" sev DAX: Функционал 1 11.04.2006 10:19
Неудобство использования аналитик "Цвет" и "Размер" clerk DAX: Функционал 17 23.05.2005 13:08
Кнопки "Строки" в "Общем журнале" ands DAX: Администрирование 2 03.02.2005 12:34
"LIKE" и "OR" в "qbds" @x DAX: Программирование 14 20.01.2004 13:20

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

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

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