Home > matpower5.1 > psse_parse.m

psse_parse

PURPOSE ^

PSSE_PARSE Parses the data from a PSS/E RAW data file.

SYNOPSIS ^

function [data, warns] = psse_parse(records, sections, verbose, rev)

DESCRIPTION ^

PSSE_PARSE  Parses the data from a PSS/E RAW data file.
   DATA = PSSE_PARSE(RECORDS, SECTIONS)
   DATA = PSSE_PARSE(RECORDS, SECTIONS, VERBOSE)
   DATA = PSSE_PARSE(RECORDS, SECTIONS, VERBOSE, REV)
   [DATA, WARNINGS] = PSSE_PARSE(RECORDS, SECTIONS, ...)

   Parses the data from a PSS/E RAW data file (as read by PSSE_READ)
   into a struct.

   Inputs:
       RECORDS : cell array of strings, corresponding to the lines
                 in the RAW file
       SECTIONS : struct array with indexes marking the beginning
                  and end of each section, and the name of the
                  section, fields are:
           first   : index into RECORDS of first line of section
           last    : index into RECORDS of last line of section
           name    : name of the section, as extracted from the
                     END OF ... DATA comments
       VERBOSE      :  1 (default) to display progress info, 0 otherwise
       REV          :  (optional) assume the input file is of this
                       PSS/E revision number, attempts to determine
                       REV from the file by default

   Output(s):
       DATA :  a struct with the following fields, each with two
               sub-fields, 'num' and 'txt' containing the numeric and
               text data read from the file for the corresponding section
           id
           bus
           load
           gen
           shunt
           branch
           trans2
           trans3
           area
           twodc
           swshunt
       WARNINGS :  cell array of strings containing accumulated
                   warning messages

   See also PSSE2MPC, PSSE_READ, PSSE_PARSE_SECTION, PSSE_PARSE_LINE

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

SOURCE CODE ^

0001 function [data, warns] = psse_parse(records, sections, verbose, rev)
0002 %PSSE_PARSE  Parses the data from a PSS/E RAW data file.
0003 %   DATA = PSSE_PARSE(RECORDS, SECTIONS)
0004 %   DATA = PSSE_PARSE(RECORDS, SECTIONS, VERBOSE)
0005 %   DATA = PSSE_PARSE(RECORDS, SECTIONS, VERBOSE, REV)
0006 %   [DATA, WARNINGS] = PSSE_PARSE(RECORDS, SECTIONS, ...)
0007 %
0008 %   Parses the data from a PSS/E RAW data file (as read by PSSE_READ)
0009 %   into a struct.
0010 %
0011 %   Inputs:
0012 %       RECORDS : cell array of strings, corresponding to the lines
0013 %                 in the RAW file
0014 %       SECTIONS : struct array with indexes marking the beginning
0015 %                  and end of each section, and the name of the
0016 %                  section, fields are:
0017 %           first   : index into RECORDS of first line of section
0018 %           last    : index into RECORDS of last line of section
0019 %           name    : name of the section, as extracted from the
0020 %                     END OF ... DATA comments
0021 %       VERBOSE      :  1 (default) to display progress info, 0 otherwise
0022 %       REV          :  (optional) assume the input file is of this
0023 %                       PSS/E revision number, attempts to determine
0024 %                       REV from the file by default
0025 %
0026 %   Output(s):
0027 %       DATA :  a struct with the following fields, each with two
0028 %               sub-fields, 'num' and 'txt' containing the numeric and
0029 %               text data read from the file for the corresponding section
0030 %           id
0031 %           bus
0032 %           load
0033 %           gen
0034 %           shunt
0035 %           branch
0036 %           trans2
0037 %           trans3
0038 %           area
0039 %           twodc
0040 %           swshunt
0041 %       WARNINGS :  cell array of strings containing accumulated
0042 %                   warning messages
0043 %
0044 %   See also PSSE2MPC, PSSE_READ, PSSE_PARSE_SECTION, PSSE_PARSE_LINE
0045 
0046 %   MATPOWER
0047 %   Copyright (c) 2014-2015 by Power System Engineering Research Center (PSERC)
0048 %   by Ray Zimmerman, PSERC Cornell
0049 %   Based on mpreadraw.m, written by: Yujia Zhu, Jan 2014, yzhu54@asu.edu.
0050 %
0051 %   $Id: psse_parse.m 2644 2015-03-11 19:34:22Z ray $
0052 %
0053 %   This file is part of MATPOWER.
0054 %   Covered by the 3-clause BSD License (see LICENSE file for details).
0055 %   See http://www.pserc.cornell.edu/matpower/ for more info.
0056 
0057 %% default args
0058 if nargin < 4
0059     rev = 0;
0060     if nargin < 3
0061         verbose = 0;
0062     end
0063 end
0064 defaultrev = 23;
0065 
0066 %% inititialize section counter
0067 s = 1;
0068 warns = {};
0069 
0070 %%-----  case identification data  -----
0071 %% In some files, SBASE is followed by a comment with the REV number such as:
0072 %%  / PSS/E-29.0
0073 %%  / PSS(tm)E-30 RAW
0074 if verbose
0075     if rev
0076         fprintf('Forcing interpretation as PSS/E revision %d\n', rev);
0077     else
0078         fprintf('Attempting to determine PSS/E revision from content.\n');
0079     end
0080     fprintf('Parsing case identification data ...');
0081 end
0082 if rev
0083     warns{end+1} = sprintf('Conversion explicitly using PSS/E revision %d', rev);
0084 end
0085 [d, c] = psse_parse_line(records{1}, 'dfdfff');
0086 nn = length(d);
0087 data.id.IC = d{1};
0088 if isempty(d{2}) || d{2} <= 0
0089     error('ERROR: Probable corrupt file, unable to read a valid SBASE value from the first line.');
0090 else
0091     data.id.SBASE = d{2};
0092 end
0093 if ~isempty(d{3})
0094     data.id.REV = d{3};
0095 else    %% attempt to extract revision from comment
0096     tmp = regexp(c, 'PSS(/|\(tm\))E-(?<rev>\d+)', 'tokens');
0097     if ~isempty(tmp) && size(tmp{1}, 2) == 2
0098         data.id.REV = str2num(tmp{1}{2});
0099     else
0100         data.id.REV = 0;
0101     end
0102 end
0103 if ~isempty(d{4})
0104     data.id.XFRRAT = d{4};
0105 else
0106     data.id.XFRRAT = 0;
0107 end
0108 if ~isempty(d{5})
0109     data.id.NXFRAT = d{5};
0110 else
0111     data.id.NXFRAT = 0;
0112 end
0113 if ~isempty(d{6})
0114     data.id.BASFRQ = d{6};
0115 else
0116     data.id.BASFRQ = 0;
0117 end
0118 data.id.comment0 = c;
0119 data.id.comment1 = records{2};
0120 data.id.comment2 = records{3};
0121 if verbose
0122     if rev
0123         if data.id.REV
0124             fprintf('.. override detected rev %2d w/%2d ... done.\n', data.id.REV, rev);
0125         else
0126             fprintf('...... unknown rev, using rev %2d ... done.\n', rev);
0127         end
0128     else
0129         if data.id.REV
0130             fprintf('......... rev %2d format detected ... done.\n', data.id.REV);
0131         else
0132             fprintf('...... unknown rev, using rev %2d ... done.\n', defaultrev);
0133         end
0134     end
0135 end
0136 if ~rev
0137     if data.id.REV
0138         rev = data.id.REV;      %% use detected value
0139     else
0140         rev = defaultrev;       %% none detected, use default value
0141         data.id.REV = defaultrev;
0142         warns{end+1} = sprintf('Unknown REV, using REV %2d format.', defaultrev);
0143     end
0144 else
0145     data.id.REV = rev;          %% use override value
0146 end
0147 if isempty(data.id.IC) || data.id.IC ~= 0
0148     warns{end+1} = sprintf('IC = %d indicates that this may be a change case, rather than base case\n         PSSE2MPC is NOT designed to handle change cases.', data.id.IC);
0149     if verbose
0150         fprintf('WARNING : %s\n', warns{end});
0151     end
0152 end
0153 s = s + 1;
0154 
0155 %%-----  bus data  -----
0156 if rev < 24         %% includes load data
0157     [data.bus, warns] = psse_parse_section(warns, records, sections, s, verbose, ...
0158         'bus', 'ddffffdffsfd');
0159 elseif rev < 31     %% includes fixed shunt data, load separate
0160     [data.bus, warns] = psse_parse_section(warns, records, sections, s, verbose, ...
0161         'bus', 'dsfdffddffd');
0162 else                %% fixed shunt and load data separate
0163     [data.bus, warns] = psse_parse_section(warns, records, sections, s, verbose, ...
0164         'bus', 'dsfddddffff..');
0165 %       'bus', 'dsfddddffffff');
0166 end
0167 s = s + 1;
0168 
0169 %%-----  load data  -----
0170 if rev >= 24
0171     [data.load, warns] = psse_parse_section(warns, records, sections, s, verbose, ...
0172         'load', 'd.d..ffffff...');
0173 %       'load', 'dsdddffffffddd');
0174     s = s + 1;
0175 end
0176 
0177 %%-----  fixed shunt data  -----
0178 if rev > 30     %% fixed shunt data is included in bus data for rev <= 30
0179     [data.shunt, warns] = psse_parse_section(warns, records, sections, s, verbose, ...
0180         'fixed shunt', 'd.dff');
0181 %       'fixed shunt', 'dsdff');
0182     s = s + 1;
0183 end
0184 
0185 %%-----  generator data  -----
0186 [data.gen, warns] = psse_parse_section(warns, records, sections, s, verbose, ...
0187     'generator', 'd.fffff.f.....d.ff...........');
0188 %   'generator', 'dsfffffdffffffdfffdfdfdfdfsdf');
0189 s = s + 1;
0190 
0191 %%-----  branch data  -----
0192 if rev <= 27   %% includes transformer ratio, angle
0193     [data.branch, warns] = psse_parse_section(warns, records, sections, s, verbose, ...
0194         'branch', 'dd.ffffffffffffd');
0195 %       'branch', 'dddffffffffffffd');
0196 elseif rev < 31
0197     [data.branch, warns] = psse_parse_section(warns, records, sections, s, verbose, ...
0198         'branch', 'dd.ffffffffffd');
0199 %       'branch', 'ddsffffffffffdfdfdfdfdf');
0200 else
0201     [data.branch, warns] = psse_parse_section(warns, records, sections, s, verbose, ...
0202         'branch', 'dd.ffffffffffd');
0203 %       'branch', 'ddsffffffffffddfdfdfdfdf');
0204 end
0205 s = s + 1;
0206 
0207 %%-----  skip transformer adjustment data  -----
0208 if rev <= 27
0209     [s, warns] = psse_skip_section(warns, sections, s, verbose, 'transformer adjustment');
0210 end
0211 
0212 %%-----  transformer data  -----
0213 if rev > 27
0214     %% PSS/E stores two winding and three winding transformer data in the same
0215     %% section in RAW file. We read in 2 passes, first pass determines the type of
0216     %% each, second pass reads the data.
0217     label = 'transformer';
0218     if ~isempty(sections(s).name) && ~strcmpi(label, sections(s).name)
0219         if verbose > 1
0220             fprintf('-----  WARNING:  Expected section labeled: ''%s''\n', upper(label));
0221             fprintf('-----            Found section labeled:    ''%s''\n', sections(s).name);
0222         end
0223     end
0224 
0225     %% Step 1 : Count and collect transformer types
0226     if verbose
0227         fprintf('Analyzing transformer types ...');
0228     end
0229 
0230     %% estimate max number of transformers by number of lines in section
0231     nt2 = round((sections(s).last - sections(s).first + 1) / 4);
0232     nt3 = round((sections(s).last - sections(s).first + 1) / 5);
0233 
0234     %% initialize indexes for transformer types
0235     idx2 = zeros(nt2, 1);
0236     idx3 = zeros(nt3, 1);
0237 
0238     %% set up counters
0239     i = sections(s).first;      %% initialize record index
0240     i2 = 0;
0241     i3 = 0;
0242 
0243     while i <= sections(s).last
0244         %% determine transformer type
0245         pat = '[^''",\s/]+\s*(,|\s)\s*[^''",\s/]+\s*(,|\s)\s*([^''",\s/]+)';
0246         m = regexp(records{i}, pat, 'tokens', 'once');
0247         if length(m) ~= 3
0248             disp(m);
0249             error('m should be length 3');
0250         end
0251         if length(m{3}) == 1 && m{3}(1) == '0'  %% two-winding
0252             i2 = i2 + 1;
0253             idx2(i2) = i;
0254             i = i + 4;
0255         else                                    %% three-winding
0256             i3 = i3 + 1;
0257             idx3(i3) = i;
0258             i = i + 5;
0259         end
0260     end
0261     nt2 = i2;
0262     nt3 = i3;
0263 
0264     if verbose
0265         str = sprintf(' %d(%d) two(three)-winding.', nt2, nt3);
0266         spacers = repmat('.', 1, 36-length(str));
0267         fprintf('%s %s ... done.\n', spacers, str);
0268     end
0269 
0270     %% trim index vectors down to size
0271     idx2 = idx2(1:nt2);
0272     idx3 = idx3(1:nt3);
0273 
0274     %% parse record 1 (cols 1-20)
0275     [t2_1, warns] = psse_parse_section(warns, records(idx2), verbose, ...
0276         '2-winding transformers (1)', 'dd..ddd....d........');
0277 %       '2-winding transformers (1)', 'dddsdddffdsddfdfdfdf');
0278     [t3_1, warns] = psse_parse_section(warns, records(idx3), verbose, ...
0279         '3-winding transformers (1)', 'ddd.ddd....d........');
0280 %       '3-winding transformers (1)', 'dddsdddffdsddfdfdfdf');
0281 
0282     %% two-winding
0283     %% parse record 2 (cols 21-23)
0284     [t2_2, warns] = psse_parse_section(warns, records(idx2+1), verbose, ...
0285         '2-winding transformers (2)', 'fff');
0286 
0287     %% parse record 3 (cols 24-39)
0288     %% parse up to CX1, should warn if CNXA1 is present and non-zero
0289     [t2_3, warns] = psse_parse_section(warns, records(idx2+2), verbose, ...
0290         '2-winding transformers (3)', 'ffffff..........');
0291 %       '2-winding transformers (3)', 'ffffffddffffddff');
0292 
0293     %% parse record 4 (cols 40-41)
0294     [t2_4, warns] = psse_parse_section(warns, records(idx2+3), verbose, ...
0295         '2-winding transformers (4)', 'ff');
0296 
0297     %% three-winding
0298     %% parse record 2 (cols 21-31)
0299     [t3_2, warns] = psse_parse_section(warns, records(idx3+1), verbose, ...
0300         '3-winding transformers (2)', 'fffffffffff');
0301 %       '3-winding transformers (2)', 'fffffffffff');
0302 
0303     %% parse record 3 (cols 32-47)
0304     %% parse up to CX1, should warn if CNXA1 is present and non-zero
0305     [t3_3, warns] = psse_parse_section(warns, records(idx3+2), verbose, ...
0306         '3-winding transformers (3)', 'ffffff..........');
0307 %       '3-winding transformers (3)', 'ffffffddffffddff');
0308 
0309     %% parse record 4 (cols 48-63)
0310     %% parse up to CX2
0311     [t3_4, warns] = psse_parse_section(warns, records(idx3+3), verbose, ...
0312         '3-winding transformers (4)', 'ffffff..........');
0313 %       '3-winding transformers (4)', 'ffffffddffffddff');
0314 
0315     %% parse record 5 (cols 64-79)
0316     %% parse up to CX3
0317     [t3_5, warns] = psse_parse_section(warns, records(idx3+4), verbose, ...
0318         '3-winding transformers (5)', 'ffffff..........');
0319 %       '3-winding transformers (5)', 'ffffffddffffddff');
0320 
0321     %% assemble two-winding transformer records
0322     data.trans2.num = [t2_1.num(:, 1:20) t2_2.num(:, 1:3) t2_3.num(:, 1:16) t2_4.num(:, 1:2)];
0323     data.trans2.txt = [t2_1.txt(:, 1:20) t2_2.txt(:, 1:3) t2_3.txt(:, 1:16) t2_4.txt(:, 1:2)];
0324 
0325     %% assemble three-winding transformer records
0326     data.trans3.num = [t3_1.num(:, 1:20) t3_2.num(:, 1:11) t3_3.num(:, 1:16) t3_4.num(:, 1:16) t3_5.num(:, 1:16)];
0327     data.trans3.txt = [t3_1.txt(:, 1:20) t3_2.txt(:, 1:11) t3_3.txt(:, 1:16) t3_4.txt(:, 1:16) t3_5.txt(:, 1:16)];
0328 
0329     % if verbose
0330     %     fprintf('%s\n', upper(label));
0331     %     fprintf('%s\n', sections(s).name);
0332     % end
0333     s = s + 1;
0334 end
0335 
0336 %%-----  area interchange data  -----
0337 [data.area, warns] = psse_parse_section(warns, records, sections, s, verbose, 'area', 'ddffs');
0338 s = s + 1;
0339 
0340 %%-----  two-terminal DC transmission line data  -----
0341 label = 'two-terminal DC';
0342 if ~isempty(sections(s).name) && ~strcmpi(label, sections(s).name)
0343     if verbose > 1
0344         fprintf('-----  WARNING:  Expected section labeled: ''%s''\n', upper(label));
0345         fprintf('-----            Found section labeled:    ''%s''\n', sections(s).name);
0346     end
0347 end
0348 idx = sections(s).first:3:sections(s).last;
0349 if rev < 31
0350     [dc1, warns] = psse_parse_section(warns, records(idx), verbose, ...
0351         'two-terminal DC (1)', '.d.ff.......');
0352 %       'two-terminal DC (1)', 'ddffffffsfdf');
0353     [dc2, warns] = psse_parse_section(warns, records(idx+1), verbose, ...
0354         'two-terminal DC (2)', 'd.ff.............');
0355 %       'two-terminal DC (2)', 'ddffffffffffdddsf');
0356     [dc3, warns] = psse_parse_section(warns, records(idx+2), verbose, ...
0357         'two-terminal DC (3)', 'd.ff.............');
0358 %       'two-terminal DC (3)', 'ddffffffffffdddsf');
0359 else
0360     [dc1, warns] = psse_parse_section(warns, records(idx), verbose, ...
0361         'two-terminal DC (1)', '.d.ff.......');
0362 %       'two-terminal DC (1)', 'sdffffffsfdf');
0363     [dc2, warns] = psse_parse_section(warns, records(idx+1), verbose, ...
0364         'two-terminal DC (2)', 'd.ff.............');
0365 %       'two-terminal DC (2)', 'ddffffffffffdddDf');
0366     [dc3, warns] = psse_parse_section(warns, records(idx+2), verbose, ...
0367         'two-terminal DC (3)', 'd.ff.............');
0368 %       'two-terminal DC (3)', 'ddffffffffffdddDf');
0369 end
0370 
0371 %% assemble two-terminal DC transmission line
0372 data.twodc.num = [dc1.num dc2.num dc3.num];
0373 data.twodc.txt = [dc1.txt dc2.txt dc3.txt];
0374 % if verbose
0375 %     fprintf('%s\n', upper(label));
0376 %     fprintf('%s\n', sections(s).name);
0377 % end
0378 s = s + 1;
0379 
0380 %%-----  skip voltage source converter data  -----
0381 if rev > 28
0382     [s, warns] = psse_skip_section(warns, sections, s, verbose, 'voltage source converter');
0383 end
0384 
0385 %%-----  switched shunt data  -----
0386 if rev < 31
0387     %% parse up to B1
0388     if rev <= 27
0389         [data.swshunt, warns] = psse_parse_section(warns, records, sections, s, verbose, ...
0390             'switched shunt', 'd....f');
0391 %           'switched shunt', 'ddffdfdfdfdfdfdfdfdfdf');
0392     elseif rev <= 29
0393         [data.swshunt, warns] = psse_parse_section(warns, records, sections, s, verbose, ...
0394             'switched shunt', 'd.....f');
0395 %           'switched shunt', 'ddffdsfdfdfdfdfdfdfdfdf');
0396     else    %%  rev == 30
0397         [data.swshunt, warns] = psse_parse_section(warns, records, sections, s, verbose, ...
0398             'switched shunt', 'd......f');
0399 %           'switched shunt', 'ddffdfsfdfdfdfdfdfdfdfdf');
0400     end
0401     s = s + 1;
0402 end
0403 
0404 %%-----  skip impedance correction data  -----
0405 [s, warns] = psse_skip_section(warns, sections, s, verbose, 'impedance correction');
0406 
0407 %%-----  skip multi-terminal DC data  -----
0408 [s, warns] = psse_skip_section(warns, sections, s, verbose, 'multi-terminal DC');
0409 
0410 %%-----  skip multi-section line data  -----
0411 [s, warns] = psse_skip_section(warns, sections, s, verbose, 'multi-section line');
0412 
0413 %%-----  skip zone data  -----
0414 [s, warns] = psse_skip_section(warns, sections, s, verbose, 'zone');
0415 
0416 %%-----  skip inter-area transfer data  -----
0417 [s, warns] = psse_skip_section(warns, sections, s, verbose, 'inter-area transfer');
0418 
0419 %%-----  skip owner data  -----
0420 if rev > 24
0421     [s, warns] = psse_skip_section(warns, sections, s, verbose, 'owner');
0422 end
0423 
0424 %%-----  skip FACTS control device data  -----
0425 if rev > 25
0426     [s, warns] = psse_skip_section(warns, sections, s, verbose, 'FACTS control device');
0427 end
0428 
0429 %%-----  switched shunt data  -----
0430 if rev > 30
0431     %% parse up to B1
0432     if rev < 32
0433         [data.swshunt, warns] = psse_parse_section(warns, records, sections, s, verbose, ...
0434             'switched shunt', 'd......f');
0435 %           'switched shunt', 'ddffdfsfdfdfdfdfdfdfdfdf');
0436     else
0437         [data.swshunt, warns] = psse_parse_section(warns, records, sections, s, verbose, ...
0438             'switched shunt', 'd........f');
0439 %           'switched shunt', 'ddddffdfsfdfdfdfdfdfdfdfdf');
0440     end
0441     s = s + 1;
0442 end
0443 
0444 %%-----  skip GNE device data  -----
0445 if rev > 31
0446     [s, warns] = psse_skip_section(warns, sections, s, verbose, 'GNE device');
0447 end
0448 
0449 %%-----  skip induction machine data  -----
0450 if rev > 32
0451     [s, warns] = psse_skip_section(warns, sections, s, verbose, 'induction machine');
0452 end
0453 
0454 %%-----  check for extra sections  -----
0455 if s <= length(sections)
0456     warns{end+1} = sprintf('Found %d additional section(s)', length(sections)-s+1);
0457     if verbose > 1
0458         fprintf('-----  WARNING:   Found %d additional section(s):\n', length(sections)-s+1);
0459     end
0460 end
0461 while s <= length(sections)
0462     n = sections(s).last - sections(s).first + 1;
0463     if n
0464         str = sprintf('with %d line(s)', n);
0465     else
0466         str = sprintf('(empty)');
0467     end
0468     if isempty(sections(s).name)
0469         warns{end+1} = sprintf('  unlabeled section %s', str);
0470         if verbose > 1
0471             fprintf('-----            unlabeled section %s\n', str);
0472         end
0473     else
0474         warns{end+1} = sprintf('  ''%s DATA'' %s', sections(s).name, str);
0475         if verbose > 1
0476             fprintf('-----            ''%s DATA'' %s\n', sections(s).name, str);
0477         end
0478     end
0479     s = s + 1;
0480 end
0481 
0482 
0483 
0484 %%---------------------------------------------------------------------
0485 function [s, warns] = psse_skip_section(warns, sections, s, verbose, label)
0486 %PSSE_SKIP_SECTION  Skips over a section without extracting any data.
0487 %   [SIDX, WARNINGS] = PSSE_SKIP_SECTION(WARNINGS, SECTIONS, SIDX, VERBOSE, LABEL)
0488 
0489 if s > length(sections)
0490     if verbose
0491         spacers = repmat('.', 1, 58-length(label));
0492         fprintf('No %s data read %s done.\n', label, spacers);
0493     end
0494 else
0495     nr = sections(s).last - sections(s).first + 1;
0496     if nr > 1
0497         ss = 'lines';
0498     else
0499         ss = 'line';
0500     end
0501     if nr
0502         warns{end+1} = sprintf('Skipped %d %s of %s data.', nr, ss, label);
0503     end
0504     if ~isempty(sections(s).name) && ~strcmp(upper(label), sections(s).name)
0505         warns{end+1} = sprintf('Section label mismatch, found ''%s'', expected ''%s''', ...
0506             sections(s).name, upper(label));
0507         if verbose
0508             fprintf('-----  WARNING:  Found section labeled:    ''%s''\n', sections(s).name);
0509             fprintf('-----            Expected section labeled: ''%s''\n', upper(label));
0510         end
0511     end
0512     if verbose && nr
0513         spacers = repmat('.', 1, 47-length(ss)-length(label));
0514         fprintf('Skipping%6d %s of %s data %s done.\n', nr, ss, label, spacers);
0515     end
0516     s = s + 1;
0517 end

Generated on Fri 20-Mar-2015 18:23:34 by m2html © 2005