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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.05.2007, 06:44   #1  
PavelSR is offline
PavelSR
Участник
 
98 / 10 (1) +
Регистрация: 25.05.2006
Спец символы в AsciiIO и CommaIO
Добрый День!
Ктонибудь может перечислить все отличия обработки спец символов в CommaIO(выгрузка в файл) по сравнению с AsciiIO.

Например:
1. В CommaIO все значения обрамляются двойными кавычками, за исключением чисел.
2. В CommaIO cимвол двойных кавычек(<">) дублируется
3. В CommaIO символ перевода строки заменяется пробелом.
4....

Продолжите пожайлуста эту цепочку.
Старый 04.05.2007, 11:30   #2  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
CommaIO - предполагает наличие некоторой табличной структуры содержимого файла. Т.е. при его использовании предполагается, что строка файла - это одна "запись" таблицы, а внутри строки - набор "полей". Отсюда и ряд ограничений..

Что есть "строка", а что "поле" определяется по заранее указанным символам - ограничителям. По умолчанию, границей "строки" является символ перевода строки и (или) возврата каретки, а границей "поля" - запятая.

Как следствие, чтобы не возникало путаницы, символ перевода строки внутри "поля" необходимо на что-то заменить. Вот и происходит замена как символа "\n", так и символа "\r" на пробел.

И, хотя, символ "конец строки" есть настраиваемое значение, но на факт замены это не влиянет. Видимо, недоработка разработчиков.

Содержимое итогового файла - это всегда текст. Набор символов. Однако если для числовых данных никакой неоднозначности нет, то для всех прочих типов данных, в общем случае не всегда можно определить где начало, а где конец "поля". Ведь "поле" внутри себя может содержать символ-ограничитель "полей".

Поэтому, все не числовые "поля" в обязательном порядке обрамляется двойными кавычками. Это безусловное и не настриваемое ограничение.

Как следствие, если внутри "поля" есть двойная кавычка, то, чтобы отличить ее от символа, ограничивающего значение поля, происходит задвоение символа двойной кавычки.

Другими словами, все автозамены при работе с CommaIO взяты не "с потолка", а имеют вполне практический смысл, призванный, по возможности, уменьшить неоднозначность, при разбиении текстовго файла на "поля" и "строки".


AsciiIO - выводит информацию "как есть". Точнее, как текстовую информацию. "Гладкий" текст. Поэтому, по умолчанию, никаких автозамен и добавлений кавычек не происходит. Текст выводится "как есть". Только добавляются пробелы между "полями".

Однако, поскольку AsciiIO - наследник от CommaIO, то у него также можно настроить символы-ограничители полей и строк. Но AsciiIO проработан лучше чем CommaIO.

Если происходит настройка символа-ограничителя строк и содержимое одного из полей имеет внутри себя символ "\n", то произойдет автозамена этого символа на настроенный символ-ограничитель строк. В остальном, никаких автозамен AsciiIO не делает.
За это сообщение автора поблагодарили: mazzy (5), kashperuk (6).
Теги
asciio, commaio, как правильно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибка при инициализации AsciiIO объекта evv DAX: Программирование 3 10.05.2008 15:37
Работа с классом AsciiIO longson DAX: Программирование 7 08.07.2007 19:02
Аксапта выдает AsciiIo объект не инициализирован? Hidden DAX: Программирование 9 10.06.2006 13:47
В чем различие в CommaIO и AsciiIO rumpleteazer DAX: Программирование 6 22.02.2005 17:31
CommaIo и пути доступа к файлам Владимир Максимов DAX: Программирование 4 16.01.2004 11:50
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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