?? readsfs.m
字號:
list=ffx{3};
if nargin<2 ty=0; end
if nargin<3 sub=0; end
if ty<0 ty=list(1,1); end
if ischar(sub)
lsub=length(sub);
proglist=ffx{4};
for itt=size(proglist,1):-1:2
if list(itt,1)==ty & length(proglist{itt,1})>=lsub
if strcmpi(sub,proglist{itt,1}(1:lsub))
it=itt;
end
end
end
if (isempty(it))
if any(mode=='c') & isempty(xfid) % try to create item if we haven't tried before
xfid=-1;
if nargin>=7
xname=xpath;
xfid=fopen(xname);
end
if xfid<0
if any('/\'==xpath(end)) % would be better to use fullfile()
xname=[xpath sub EXESUF];
else
xname=[xpath '/' sub EXESUF];
end
xfid=fopen(xname);
end
if xfid<0
error(sprintf('Cannot find executable program %s',sub));
else
fclose(xfid);
fclose(fid); % close this file
doscom=['cmd /c "' xname '" ' ffx{1}];
%fprintf(1,'Executing: %s\n',doscom);
if dos(doscom) % run the program
error(sprintf('Error running DOS command: %s',doscom));
end
ff=ffx{1}; % force reread of header information
end
else
error(sprintf('Cannot find item %d.%s in file: %s',ty,sub,ff));
end
end
else % numeric subitem specification
if sub>0
it = find(list(:,1)==ty & list(:,2)==sub);
elseif sub==0
it = min(find(list(:,1)==ty));
else
it = max(find(list(:,1)==ty));
end
if (isempty(it))
error(sprintf('Cannot find item %d.%d in file: %s',ty,sub,ff));
end
end
end % loop up to two times while (isempty(it))
lit=list(it,:);
if ffx{2}(3)~=it
ffx{2}(3)=it;
ffx{2}(4)=0;
end
% read the selected item with the correct byte order
if lit(5)~=ffx{2}(2)
fclose(fid);
fid=fopen(ffx{1},'rb',char('b'+(lit(5)~=0)*('l'-'b')));
ffx{2}(1:2)=[fid lit(5)];
if fid == -1 error(sprintf('Can''t open %s for input',ff)); end
end
fseek(fid,lit(4),'bof');
y=[];
fs=0;
if ~lit(1) % read main header
mb=fread(fid,512,'uchar').';
if nargout>2
mc=[1 4; 9 28; 29 32; 37 56; 57 76; 77 96; 97 116; 117 136; 137 296; 297 304; 305 312; 313 332; 333 412];
hd=cell(14,1);
hd{1}=[pow2(1,8*([2 3 0 1]+(mb(512)==0)*[1 -1 1 -1]))*[mb(5:8); mb(33:36)].' mb(512)];
hd{1}(1)=hd{1}(1)/86400+719529; % convert date format
for i=1:13
hd{i+1}=char(zerotrim(mb(mc(i,1):mc(i,2))));
end
end
else
% read the item header
hd=cell(4,1);
hdr=zeros(1,14);
[str,n]=fread(fid,256,'uchar');
if (n<256) error(sprintf('Error reading item %d.%d in file: %s',ty,sub,file)); end
hd{2}=char(zerotrim(str'));
[str,n]=fread(fid,128,'uchar');
if (n<128) error(sprintf('Error reading item %d.%d in file: %s',ty,sub,file)); end
hd{3}=char(zerotrim(str'));
hdr(1:8)=fread(fid,8,'long');
hdr(9)=fread(fid,1,'double');
if hdr(9) fs=1/hdr(9); end
hdr(10)=fread(fid,1,'long');
hdr(11)=fread(fid,1,'double');
[str,n]=fread(fid,20,'uchar');
if (n<20) error(sprintf('Error reading item %d.%d in file: %s',ty,sub,file)); end
hd{4}=char(zerotrim(str'));
[hdr(12:14),n]=fread(fid,3,'long');
if (n<3) error(sprintf('Error reading item %d.%d in file: %s',ty,sub,file)); end
fseek(fid,44,'cof');
hd{1}=hdr;
hd{1}(1)=hd{1}(1)/86400+719529; % convert date format
% now read the actual data
if nargin<6 nskip=ffx{2}(4);
elseif nskip<0 nskip=ffx{2}(4);
end
ksamples=hdr(7)-nskip;
if nargin>4
if nmax>=0
ksamples=min(nmax,ksamples);
end
end
if ksamples>0
ffx{2}(4)=nskip+ksamples;
fsz=hdr(6);
if(hdr(10)==1) % data present
if(hdr(4)>=0) % non-structured
ds=hdr(5);
if(hdr(4)>0)
if(ds==4) fmt='float';
elseif (ds==8) fmt='double';
else error('error in sfs file'); end
else
if(ds==1 & all(mode~='i')) fmt='uchar';
elseif(ds<=2) fmt='short'; fsz=ceil(fsz*ds/2);
elseif(ds==4) fmt='long';
else error('error in sfs file'); end
end
fseek(fid,lit(4)+512+nskip*fsz*ds,'bof');
nd=fsz*ksamples;
[y,n]=fread(fid,nd,fmt);
if (n<nd) error(sprintf('Error reading item %d.%d in file: %s',ty,sub,file)); end
y = reshape(y,fsz,ksamples)';
else
if (hdr(2)==5)
y = cell(ksamples,3);
for ifr=1:nskip
lf=fread(fid,1,'uchar');
fseek(fid,lf,'cof');
end
for ifr=1:ksamples
lf=fread(fid,1,'uchar');
tdat=fread(fid,2,'long');
y(ifr,:)={tdat(1) tdat(2) char(fread(fid,lf-9,'uchar').')};
lf=fread(fid,1,'uchar');
end
else
error(sprintf('Cannot convert item %d.%d in file: %s',ty,sub,file));
end
end
end
end
end
if all(mode~='f') fclose(fid); ffx{2}(1)=-1; end
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -