⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parseheader.m

📁 时间序列分析的信号处理MATLAB工具包
💻 M
字号:
function	[status, dlens, comment, param, revision, last_header_block] = parseheader(fid)% Diese Funktion liest nur die Headerdaten des Files, nicht den Datenteil% Der Filepointer sollte danach genau auf den Anfang der Daten zeigen% In Matlab ist die erste Dimension die ist, in der die Daten im Speicher% am dichtesten liegen. Auf dieser wird per Default auch gearbeitet.% Diese erste Dimension ist auch die Column-Dimension% (Columns = Dim. 1, Rows = Dim.2 ...)% Das gleiche gilt fuer das NLD-Formatcomment = {};param = defaultparam;dlens = [];		% [3 10 8] means length of first dimension = 3, ...nd = 0;		% Number of axes (dimensions)last_header_block  = -1;			% Stichwort bislang noch gar nicht aufgetauchtline = deblank(fgetl(fid));if strncmp(line,'P NLD-TSTOOL', 12)		% File-Magic vorhanden ?	if length(line) > 12		revision = deblank(line(13:end));			revision = fliplr(deblank(fliplr(revision)));		else		revision = '0';	end		switch revision 		%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%		case '1.0'		%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%			while ~strcmp(line,'P EOH')				line = fgetl(fid);				if feof(fid) ~= 0					status = -1;		% Fileende erreicht vor dem Magic EOH					warning('End-of-File reached before Header was finished');					return;				end				rest = deblank(line(2:end));			% nachfolgende Blanks entfernen				rest = fliplr(deblank(fliplr(rest)));	% fuehrende Blanks entfernen					switch line(1)		% erster Buchstabe entscheidet					case	{'P', 'p'}						if strcmp(rest,'EOH')		% Header bereits fertig ?							break						end						[token,rem] = strtok(rest, ' :='); % Parametername kann von Blank,= oder : beendet werden						if ~isempty(rem)							rem = rem(2:end);		% Blank, = oder : vom Remainder noch entfernen						end												parsed = 0; 				% Flag wird gesetzt, sobald dieser Parameter behandelt wurde						if strcmp(token(1),'n')							length = str2num(rem);							if length > 0								nd = nd +1;								dlens(1, nd) = length;								param.xdelta(1,nd) = [1];								param.xfirst(1,nd) = [0];								param.xnames{nd,1} = token(2:end);								param.xunits{nd,1} = '';							end							parsed = 1;						else							token = lower(token);							if nd > 0									if strcmp(token,'xname')									if isempty(param.xnames{nd})										param.xnames{nd} = rem;									else										warning(['Header Warning : xname already set, skipping new value']);									end									parsed = 1;								end								if strcmp(token,'xunit')									if isempty(param.xunits{nd})										param.xunits{nd} = rem;									else										warning(['Header Warning : xunit already set, skipping new value']);									end									parsed = 1;								end								if strcmp(token,'xfirst')									param.xfirst(nd) = str2num(rem);									parsed = 1;								end								if strcmp(token,'xdelta')												param.xdelta(nd) = str2num(rem);									parsed = 1;									end							else								switch token									case { 'xname', 'xunit', 'xfirst', 'xdelta'}		% diese sollen nicht unter param.extra auftauchen										parsed = 1;									end											end							if strcmp(token,'dtype')								rem = lower(rem);								switch rem									case { 'ascii', 'binary' , 'complex' }										param.dtype = rem;									otherwise										warning(['Data type ' rem ' not supported']);										status = -2;	% Data type not supported										return;								end								parsed = 1;							end							if strcmp(token,'yname')								if isempty(param.yname)									param.yname = rem;								else									warning(['Header Warning : yname already set, skipping new value']);								end								parsed = 1;							end							if strcmp(token,'yunit')								if isempty(param.yunit)									param.yunit = rem;								else									warning(['Header Warning : yunit already set, skipping new value']);								end								parsed = 1;							end							if strcmp(token,'last_header_block')								temp = str2num(rem);								if last_header_block ~= 0 & last_header_block~= 1									warning('Wrong argument for last_header_block');								else									last_header_block = temp;								end								parsed = 1;							end							if ~parsed								siz = size(param.extra);								ende = siz(1);								param.extra{ende+1,1} = token;								param.extra{ende+1,2} = rem;								parsed = 1;							end						end					case 	{'C', 'c'}						comment{end+1, 1} = rest;					otherwise						warning(['Wrong header line : ' line]);				end 			end 					% while ~strcmp(line,'P EOH')			if  nd > 0						status = 0;			else				warning('No valid axis found');				status = -3;	% No valid axis found				return;			end					%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%			otherwise		%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%		    while ~strcmp(line,'P EOH')            line = fgetl(fid);            if feof(fid) ~= 0                    status = -1;            % Fileende erreicht vor dem Magic EOH                    warning('End-of-File reached before Header was finished');                    return;            end                        rest = deblank(line(2:end));                    % nachfolgende Blanks entfernen            rest = fliplr(deblank(fliplr(rest)));   % fuehrende Blanks entfernen                switch line(1)          % erster Buchstabe entscheidet                case    {'P', 'p'}                        if strcmp(rest,'EOH')           % Header bereits fertig ?                                break                        end                        [token,rem] = strtok(rest, ' :='); % Parametername kann von Blank,= oder : beendet werden                        if ~isempty(rem)                                rem = rem(2:end);               % Blank, = oder : vom Remainder noch entfernen                        end                        token = lower(token);                        parsed = 0;                             % Flag wird gesetzt, sobald dieser Parameter behandelt wurde                        if strcmp(token(1),'n')                                length = str2num(rem);                                if length > 0                                        nd = nd +1;                                        dlens(1, nd) = length;                                        param.xdelta(1,nd) = [1];                                        param.xfirst(1,nd) = [0];                                        param.xnames{nd,1} = '';                                        param.xunits{nd,1} = '';                                end                                parsed = 1;                        else                                if nd > 0                                               if strcmp(token,'xname')                                                if isempty(param.xnames{nd})                                                        param.xnames{nd} = rem;                                                else                                                        warning(['Header Warning : xname already set, skipping new value']);                                                end                                                parsed = 1;                                        end                                        if strcmp(token,'xunit')                                                if isempty(param.xunits{nd})                                                        param.xunits{nd} = rem;                                                else                                                        warning(['Header Warning : xunit already set, skipping new value']);                                                end                                                parsed = 1;                                        end                                        if strcmp(token,'xfirst')                                                param.xfirst(nd) = str2num(rem);                                                parsed = 1;                                        end                                        if strcmp(token,'xdelta')                                                                       param.xdelta(nd) = str2num(rem);                                                parsed = 1;                                             end                                else                                        switch token                                                case { 'xname', 'xunit', 'xfirst', 'xdelta'}            % diese sollen nicht unter param.extra auftauchen                                                        parsed = 1;                                             end                                                             end                                if strcmp(token,'dtype')                                        rem = lower(rem);                                        switch rem                                                case { 'ascii', 'binary' , 'complex' }                                                        param.dtype = rem;                                                otherwise                                                        warning(['Data type ' rem ' not supported']);                                                        status = -2;    % Data type not supported                                                        return;                                        end                                        parsed = 1;                                end                                if strcmp(token,'yname')                                        if isempty(param.yname)                                                param.yname = rem;                                        else                                                warning(['Header Warning : yname already set, skipping new value']);                                        end                                        parsed = 1;                                end                                if strcmp(token,'yunit')                                        if isempty(param.yunit)                                                param.yunit = rem;                                        else                                                warning(['Header Warning : yunit already set, skipping new value']);                                        end                                        parsed = 1;                                end                                if ~parsed                                        siz = size(param.extra);                                        ende = siz(1);                                        param.extra{ende+1,1} = token;                                        param.extra{ende+1,2} = rem;                                        parsed = 1;                                end                        end                case    {'C', 'c'}                        comment{end+1, 1} = rest;                otherwise                        warning(['Wrong header line : ' line]);        	end 		% switch line        end 	% while         if  nd > 0  			        	status = 0;        else        	warning('No valid axis found');        	status = -3;	% No valid axis found        	return;        end		end 						% switch revisionelse	warning('Not an NLD File (magic not found)');	status = -4;	% Not an NLD File (magic not found)	return;end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -