Реализация класса файла данных. Для реализации класса файла данных необходимо описать наследника базового класса DataFile. Класс файла данных используется непосредственно для чтения файла и сохранения данных во внутренних структурах. Файл данных может быть связан с любым количеством файлов на диске.
Для реализации необходимо:
Создать конструктор, принимающий имя файла данных. При необходимости установить кодировку по умолчанию в поле Encoding
Переопределить абстрактный метод Init – чтение данных из файла(файлов) на диске и сохранение их в своей внутренней структуре. Все данные можно не загружать во внутреннюю структуру, а использовать в дальнейшем методы для доступа к этим данным в файле.
При необходимости освобождения ресурсов следует переопределить virtual метод Dispose(disposing).
При необходимости переопределить виртуальный метод GetPreviewFileContent, в котором заполняется буфер текстовой информацией для определения кодировки файла. При этом не вызывать метод базового класса.
Для добавления сообщений, предупреждений и ошибок в лог-файл загрузки, используйте свойство Logger.
Реализация класса загрузчика файла данных. Загрузчик является оболочкой для одного или более файлов данных и предназначен для преобразования данных из внутреннего представления файлов данных в данные проекта. Для реализации загрузчика должен быть написан класс – наследник базового класса FileLoader.
Для реализации необходимо:
создать при необходимости public конструктор по умолчанию;
если необходим выбор кодировки, то установить в конструкторе свойство NeedEncoding = true (по умолчанию false);
реализовать абстрактный метод OnAddDataFile для добавления нового файла данных в список загрузки этого загрузчика. Данный метод должен возвращать либо вновь созданный объект класса DataFile, либо уже существующий объект в списке, либо null, если файл невозможно добавить в список загрузки;
реализовать абстрактный метод DetectFormat(fileName) для определения является ли заданный файл данного формата. Может возвращать одно из трех значений:
Impossible – файл точно не может быть данного формата;
Possible – файл может быть данного формата, но неоднозначно;
Sure – Файл скорее всего содержит данные этого формата.
Желательно реализовать данный метод так, чтобы он работал как можно быстрее. Например, если у файла есть заголовок, по которому можно определить формат, то читать только его. Если такого заголовка нет, то по расширению файла. Кроме того, желательно, чтобы данный метод автоматически определялся и по «вторичным» файлам. Например, данные формата Kedr содержаться в файле geo, с которым связан файл acu. Формат должен определяться по любому из них;
реализовать абстрактное свойствово Description – название формата, отображаемое пользователю;
при необходимости переопределить виртуальный метод Extensions, который возвращает возможные расширения файлов данного формата. Данные расширения используются для формирования фильтра диалога выбора файлов;
реализовать метод LoadData для загрузки объекта. В этом методе необходимо создать наблюдение(я) загрузить туда каналы, шкалу глубин и добавить созданные наблюдения в список Observations. Глубины каналов и шкала глубин наблюдения должны быть монотонными;
для загрузки значений каналов следует использовать промежуточный класс CanalValues. После завершения загрузки преобразовать CanalValues в HugeArray и создать Canal в наблюдении, подставив для CanalValueSet созданный HugeArray;
для установки хода загрузки в методе LoadData необходимо использовать методы:
SetMaxProcessValue – устанавливает максимальное значение шагов загрузки;