03.05.2007, 06:44 | #1 |
Участник
|
Спец символы в AsciiIO и CommaIO
Добрый День!
Ктонибудь может перечислить все отличия обработки спец символов в CommaIO(выгрузка в файл) по сравнению с AsciiIO. Например: 1. В CommaIO все значения обрамляются двойными кавычками, за исключением чисел. 2. В CommaIO cимвол двойных кавычек(<">) дублируется 3. В CommaIO символ перевода строки заменяется пробелом. 4.... Продолжите пожайлуста эту цепочку. |
|
04.05.2007, 11:30 | #2 |
Участник
|
CommaIO - предполагает наличие некоторой табличной структуры содержимого файла. Т.е. при его использовании предполагается, что строка файла - это одна "запись" таблицы, а внутри строки - набор "полей". Отсюда и ряд ограничений..
Что есть "строка", а что "поле" определяется по заранее указанным символам - ограничителям. По умолчанию, границей "строки" является символ перевода строки и (или) возврата каретки, а границей "поля" - запятая. Как следствие, чтобы не возникало путаницы, символ перевода строки внутри "поля" необходимо на что-то заменить. Вот и происходит замена как символа "\n", так и символа "\r" на пробел. И, хотя, символ "конец строки" есть настраиваемое значение, но на факт замены это не влиянет. Видимо, недоработка разработчиков. Содержимое итогового файла - это всегда текст. Набор символов. Однако если для числовых данных никакой неоднозначности нет, то для всех прочих типов данных, в общем случае не всегда можно определить где начало, а где конец "поля". Ведь "поле" внутри себя может содержать символ-ограничитель "полей". Поэтому, все не числовые "поля" в обязательном порядке обрамляется двойными кавычками. Это безусловное и не настриваемое ограничение. Как следствие, если внутри "поля" есть двойная кавычка, то, чтобы отличить ее от символа, ограничивающего значение поля, происходит задвоение символа двойной кавычки. Другими словами, все автозамены при работе с CommaIO взяты не "с потолка", а имеют вполне практический смысл, призванный, по возможности, уменьшить неоднозначность, при разбиении текстовго файла на "поля" и "строки". AsciiIO - выводит информацию "как есть". Точнее, как текстовую информацию. "Гладкий" текст. Поэтому, по умолчанию, никаких автозамен и добавлений кавычек не происходит. Текст выводится "как есть". Только добавляются пробелы между "полями". Однако, поскольку AsciiIO - наследник от CommaIO, то у него также можно настроить символы-ограничители полей и строк. Но AsciiIO проработан лучше чем CommaIO. Если происходит настройка символа-ограничителя строк и содержимое одного из полей имеет внутри себя символ "\n", то произойдет автозамена этого символа на настроенный символ-ограничитель строк. В остальном, никаких автозамен AsciiIO не делает. |
|
|
За это сообщение автора поблагодарили: mazzy (5), kashperuk (6). |