www.gusucode.com > mbcdata 工具箱 matlab 源码程序 > mbcdata/@cgoptimdatasetfiller/fill.m

    function [success, statusmsg, datasetname] = fill(obj, pOut, pPROJ)
%FILL Fill tables in optimization filling object
%
%   [SUCCESS, STATUSMSG] = FILL(OBJ, pOUT, pPROJ) writes the data from the
%   supplied optimization results, pOUT, to the selected data set in OBJ.
%   The results are appended to the data set in the CAGE Project, pPROJ.
%
%   [SUCCESS, STATUSMSG, DATASETNAME] = FILL(OBJ, pOUT, pPROJ) also
%   returns the name of the data set that the data was exported to.
%
%   See also CGOPTIMDATASETFILLER/GUISETUP

%   Copyright 2006-2007 The MathWorks, Inc.

% Return if no data set has been specified and the fill action is overwrite
% or append
if isnull(obj.pDataset) && obj.FillAction > 1
    success = false;
    statusmsg = 'No data set specified to export to';
    datasetname = '';
    return
end

% Get the optimization results
[seldata, colnames, ptrlist, coninds] = getExportData(obj, pOut, pPROJ);
nInput = size(seldata, 2);
if getUseAcceptableOnly(obj)
    seldata = seldata(coninds, :);
end
ptrlist = ptrlist(1:nInput);
colnames = colnames(1:nInput);

% Return if there is no data 
if isempty(seldata)
    success = false;
    statusmsg = 'No optimization results to export';
    datasetname = '';
    return
end

% If here, we have a valid data set to write to. 
if obj.FillAction == 1
    [success, statusmsg, datasetname] = ...
        i_new(obj, seldata, colnames, ptrlist, pPROJ);
elseif obj.FillAction  == 2
    [success, statusmsg, datasetname] = ...
        i_append(obj, seldata, colnames, ptrlist);    
else
    [success, statusmsg, datasetname] = ...
        i_overwrite(obj, seldata, colnames, ptrlist);
end

%--------------------------------------------------------------------------
function [success, statusmsg, datasetname] = ...
    i_new(obj, seldata, colnames, ptrlist, pPROJ)
%--------------------------------------------------------------------------

% Create data set from exported optimization data
opOptimRes = i_createExportedOptimResDataset(seldata, ptrlist, colnames);

% Ensure that the data set has a unique name.
[NewDatasetName, DatasetNameChanged] = uniquename(pPROJ.info, ...
    obj.NewDatasetName);
opOptimRes = setname(opOptimRes, NewDatasetName);
if DatasetNameChanged
    statusmsg = sprintf('%s%s%s\n\n%s%s', ...
        'Data Set, ', obj.NewDatasetName, ', already exists.', ...
        'Optimization results have been exported to ', ...
        NewDatasetName, '.');
else
    statusmsg = '';
end

% Add data set to project.
pDataset = xregpointer(opOptimRes);
pDSNode = cgnode(opOptimRes, [], pDataset, 1);
addnodestoproject(pPROJ.info, pDSNode);

% Return success flag
success = true;

% Return name of data set exported to
datasetname = NewDatasetName;

%--------------------------------------------------------------------------
function [success, statusmsg, datasetname] = ...
    i_append(obj, seldata, colnames, ptrlist)
%--------------------------------------------------------------------------

% Create data set from exported optimization data
opOptimRes = i_createExportedOptimResDataset(seldata, ptrlist, colnames);

% Return name of the data set exported to
datasetname = getname(obj.pDataset.info);

% Merge exported optimization data set into existing data set
[obj.pDataset.info, dataAppendedFlag] = ...
    append(obj.pDataset.info, opOptimRes);
success = logical(dataAppendedFlag);
if success
    statusmsg = '';
else
    statusmsg = sprintf('No data appended to %s', datasetname);
end

%--------------------------------------------------------------------------
function [success, statusmsg, datasetname] = ...
    i_overwrite(obj, seldata, colnames, ptrlist)
%--------------------------------------------------------------------------

% Create data set from exported optimization data
op = i_createExportedOptimResDataset(seldata, ptrlist, colnames);

% Set the name in the new data set
dsName = getname(obj.pDataset.info);
op = setname(op, dsName);

% Copy the data set into the existing pointer location
obj.pDataset.info = op;

% This should just work - should we do this in a try/catch just in case?
success = true;
statusmsg = '';

% Return name of data set exported to
datasetname = getname(obj.pDataset.info);

%--------------------------------------------------------------------------
function op = i_createExportedOptimResDataset(seldata, ptrlist, colnames)
%--------------------------------------------------------------------------

% Target data set
op = cgoppoint;

% Add the expressions
idxExpr = isvalid(ptrlist);
exprNames = pveceval(ptrlist(idxExpr), @getname);
op = addfactor(op, ptrlist(idxExpr), ...
    seldata(:, idxExpr), 'grid_flag', 7, ...
    'created_flag', 0, 'orig_name', exprNames);

% Add the exported data columns
op = addfactor(op, colnames(~idxExpr), seldata(:, ~idxExpr), ...
    'factor_type', 2, 'grid_flag', 7, 'created_flag', 0);