Бесплатный компонент Elisy.CfInspector для чтения CF-формата. Parallel LINQ (PLINQ)

by Elisy 21. January 2011 05:55

Вышла первая версия бесплатного .Net-компонента Elisy.CfInspector для чтения CF-формата, совместимого с форматом 1С-конфигураций и внешних обработок. Для использования требуется .Net framework 4.0.

Вы можете ознакомиться с описанием CF-формата здесь.

Хотя использовать компонент можно из 1С при помощи компонента Elisy .Net Bridge, но максимальный эффект будет получен при использовании из .Net-проектов.

Для использования необходимо создать подходящий проект в Visual Studio. Добавить ссылку на сборку Elisy.CfInpector.dll. При необходимости вставить директиву:

using Elisy.CfInspector;

Пример обращения к компоненту:

var stream = new FileStream(@"D:\228\1Cv8.cf", FileMode.Open, FileAccess.Read, FileShare.Read);
Image image = ImageReader.ReadImageFrom(stream);

В результате вызова ReadImageFrom произойдет создание объекта типа Image. Image содержит несколько свойств, самым полезным из которых является Rows. Rows возвращает массив объектов ImageRow[]. Это и есть содержимое файла, записанного в формате CF. ImageRow определяет несколько свойств: Id – идентификатор данных, BodyRawData – тело в виде массива данных, Body – распознанное содержимое, которое может принимать типы: String, Image, byte[]. BodyType определяет тип данных:

  • CompressedUtf8MarkedString – сжатая строка;
  • CompressedImage – сжатый объект составного типа;
  • Utf8MarkedString – несжатая строка;
  • CompressedMoxcel – сжатый объект Moxcel;
  • Unknown – неизвестный тип.

Пример простого запроса к свойству Row – получить все данные с составным типом:

var request = from ir in image.Rows
    where ir.BodyType == ImageRowTypes.CompressedImage
    select ir;
var array = request.ToArray();

В .Net framework 4 есть достойная фича: Parallel LINQ. Используя параллельные вычисления, запрос можно выполнить значительно быстрее. Достаточно воспользоваться конструкцией AsParallel():

var request = from ir in image.Rows.AsParallel()
    where ir.BodyType == ImageRowTypes.CompressedImage
    select ir;
var array = request.ToArray();

Вот еще несколько примеров запросов:

Выбрать все макеты:

var request = from ir in image.Rows.AsParallel()
    where ir.BodyType == ImageRowTypes.CompressedMoxcel
    select new { a = ir.Id, b = Convert.ToString(ir.Body) };
var array = request.ToArray();

Выбрать все основные объекты:

var request = from ir in image.Rows.AsParallel()
    where !ir.Id.Contains('.')
    select new { a = ir.Id, b = Convert.ToString(ir.Body) };
var array = request.ToArray();

Найти корневой элемент:

var request = from ir in image.Rows.AsParallel()
    where ir.Id == "root"
    select ir.Body as string;
var root = request.FirstOrDefault();

Желаем успехов в экспериментах.

Отзывы принимаются здесь.

CfInspector.zip (4.21 kb)

Tags: , , , , ,

1C.Net | C#

Comments are closed

Richmedia.us

Добро пожаловать на сайт Richmedia.us

1 2 3 4 5 6 7 8

RecentComments

Comment RSS