::: UniChrom | BEL RUS DEU ENG |
Главная страница / Продукция / | < Назад |
Написание собственного файлового конвертера для системы UniChromПакет UniChrom-DDK предоставляет набор примеров и заголовочных файлов для создания собственного формата аналитических данных. Эта инструкция может помочь в следующих случаях:
Этот пример представляет собой самый быстрый способ написания файлвого конвертера с использованием OO библиотеки и языка ObjectPascal (FPC или Delphi) Windows или Linux - не имеет значения. unit expmain; interface uses baseconv, // базовый класс конвертера cnvtypes, // константы конвертера CNV_OK, CNV_FAIL, FLAG_WRITE ... ucintf; // Интерфейс к UniChrom type TExpFormat=class(TBaseConv) public class function FormatName:utf8string;override; class function FormatFlags:integer;override; function Imp(hSp:hSPEC;const Fname:PChar):integer;override; function Exp(hSp:hSPEC;const Fname:PChar):integer;override; end; implementation uses SysUtils,Classes, ucimp; // модуль, содержащий структуру с интерфейсом UniChrom (guc) { TExpFormat } function TExpFormat.Imp(hSp: hSPEC; const Fname: PChar): integer; begin Result:=CNV_FAIL; // Мы разрабатываем экспортёр, а не импортёр end; function TExpFormat.Exp(hSp: hSPEC; const Fname: PChar): integer; var fs:TStream; vv:variant; zSp:HSPEC; // хендл спектра i,j,lays,size,vt:integer; dt:double; bs:string; begin Result:=CNV_FAIL; try try fs:=TFileStream.Create(FName,fmCreate); // Список поддерживаемых свойств может быть исследован записью любого файла как .UWX или .XML // Мы собираемся экспортировать все масс-спектрометрические данные, присоединённые к слою #1 // Это слой содержит вложенный спектр? if gUc.GetPropValue(hSp,1,'zSpec',vv) then begin ptrUint(zSp):=ptrUint(vv); end else exit; if (zSp=HINVALID) then exit; // нет спектра, это просто хроматограмма // получим число слоёв - т.е. масс-сканов if not guc.GetPropValue(zSp,-1,'Layers',vv) then exit; lays:=vv; for i:=1 to lays do // через все сканы begin if not guc.GetPropValue(zSp,i,'Size',vv) then exit; size:=vv; if not guc.GetPropValue(zSp,i,'LastChanged',vv) then exit; dt:=vv; bs:=format('%g:',[dt]); // метка времени каждого слоя - момент сканирования for j:=1 to size do // вдоль каждого скана bs:=bs+format('(%g;%g);',[guc.GetXData(zSp,i,j), // X-data (m/z) guc.GetData(zSp,i,j)]); // Y-data (интенсивность) bs:=bs+sLineBreak; fs.Write(bs[1],length(bs)); end; Result:=CNV_OK; // Да, всё закончено успешно except on E:Exception do writeln(E.Message); // сообщить проблему в STDOUT end; finally fs.free; end; end; class function TExpFormat.FormatFlags: integer; begin Result:=FLAG_WRITE; // Наш файловый фильтр только ЭКСПОРТИРУЕТ данные end; class function TExpFormat.FormatName: utf8string; begin Result:='Export all spectra as Text (*.zzz)|*.zzz'; // Сделайте тип файла уникальным end; initialization CnvFact.Register(TExpFormat); // регистрируем конвертер с помощью фабрики во время инициализации DLL end. |