Программисту для работы с текстовыми файлами Аксапта предлагает несколько инструментов. Во-первых, это семейство классов IO: IO, CommaIO, AsciiIO, BinaryIO. Во-вторых, семейство textBuffer, parseBuffer.

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

Детальное описание каждого метода смотрите в ветке System Documentation в AOT.

 

Описание классов

IO

Класс IO является по сути своей абстрактным классом, хотя и не содержит модификаторов abstract по историческим причинам.

 

BinaryIO

Класс используется для записи данных в бинарном виде в собственном формате. Именно этот класс используется в Аксапте для экспорта/импорта данных в бинарном виде. Этот же класс используется для экспорта/импорта прав доступа. Для работы с текстовыми файлами непригоден.

 

CommaIO

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

Этот класс отличается от BinaryIO и AsciiIO тем, что обрабатывает кавычки ". Хотя это нигде не описано, похоже, что перед разбором полей в строке двойные кавычки заменяются одинарными, а затем кавычки в начале и в конце поля просто выкидываются. То, что осталось - считается значением поля. В принципе, работа с кавычками у этого класса выполняется достаточно корректно. Разделитель полей внутри кавычек отрабатывается также вполне корректно.

При чтении, метод read возвращает контейнер. В контейнере хранятся несколько строковых значений. По одному для каждого поля. Внимание, класс не занимается преобразованием типов и всегда возвращает строковые поля (и это хорошо).

 

Comma7IO

Видимо класс создавался для работы с 7-битными ASCII симовлами. Сейчас этот класс не содрежит описания. Поведение этого класса ничем не отличается от поведения класса CommaIO.

 

AsciiIO

Этот класс предназначен для построчной работы с текстовым файлом. Этот класс не разбивает строки на поля и не занимается разделителями между полями. Метод read всегда возвращает одно значение в контейнере - всю строку.

 

Семейство классов textBufferTextBuffer

Этот класс образует отдельное семейство. В отличие от IO этот класс загружает в память весь файл целиком, а затем работает с ним. Поэтому этот класс не рекомендуется использовать для больших текстов.

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

 

ParseBuffer

Этот класс наследует от TextBuffer и реализует работу с токенами. Из интересного здесь реализована простейшая работа с макросами и комментариями в методе cleanIt.

 

Выводы

Если вы работаете с данными в текстовых файлах (например, экспортированные из других систем нереляционные данные), то попробуйте использовать CommaIO.

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

Если же вы работаете с синтаксическими конструкциями (например, скрипты, строка параметров, тексты программ), попробуйте использовать TextBuffer. Только помните о том, что TextBuffer очень прожорлив до памяти.

Если вы работаете с буфером обмена, то вам нужен только TextBuffer.

А самое главное. Перед тем как программировать, подумайте, может быть вам подойдет стандартный инструмент для импорта данных? См. Импорт данных из текстового файла

 

Буду рад Вашим замечаниям и предложениям.
E-Mail: mazzy@mazzy.ru, Мазуркин Сергей