%program pro cteni souboru *.msr indikatoru Rn %program precte vsechny soubory *.msr v aktualnim adresari %v souboru exclude.dat mohou byt intervaly, ktere se maji ignorovat %v souboru val_shif.dat mohou byt intervaly, v nichz se ma hodnota eoar korigovat o zadanou hodnotu %v souboru val_mult.dat mohou byt intervaly, v nichz se ma hodnota eoar nasobit zadanym cislem %v souboru tim_shif.dat mohou byt intervaly dat, v nichz se ma korigovat hodnota casu o zadany pocet hodin clear; %nacist do jedne matice data ze vsech souboru files=dir('*.MSR'); if length(files)<.5 warning('No *.msr files in the current dir'); break; end j=1; for k=1 : length(files) filename=files(k).name %precteme jeden soubor s=textread(filename,'%s'); for i=9:4:length(s) por=char(s{i}); %poradi dat=char(s{i+1}); %datum tim=char(s{i+2}); %cas eoar=char(s{i+3}); %eoar %prevedeme poradi na cislo pornum=str2num(por); %prevedeme datum na cislo celk_dat=dat; celk_dat(length(dat)+2:length(dat)+length(tim)+1)=tim; y=str2num(celk_dat(7:10)); m=str2num(celk_dat(4:5)); d=str2num(celk_dat(1:2)); h=str2num(celk_dat(12:13)); mi=str2num(celk_dat(15:16)); se=0; datnum=datenum(y,m,d,h,mi,se); %prevedeme EOAR na cislo eoarnum=str2num(eoar); a(j,1)=pornum; a(j,2)=datnum; a(j,3)=eoarnum; j=j+1; end; end; %pomoci sortrows je setridit podle data alfa='trideni' b=sortrows(a,2); clear('a'); %porovnavat predchozi a nasledujici radek %je-li stejne datum - vymazat cely radek j=1; c(j,:)=b(j,:); for i=2 : length(b) if b(i,2)==c(j,2) j=j; else j=j+1; c(j,:)=b(i,:); end; end; clear('b'); %precist soubor s intervaly pro nulovani a vymazat vadne radky alfa='mazani radku exclude' if exist('exclude.dat') s=textread('exclude.dat','%s'); for i=1:8:length(s) poc_y=char(s(i)); poc_m=char(s(i+1)); poc_d=char(s(i+2)); poc_tim=char(s(i+3)); poc_h=poc_tim(1:2); poc_mi=poc_tim(4:5); poc_s='0'; kon_y=char(s(i+4)); kon_m=char(s(i+5)); kon_d=char(s(i+6)); kon_tim=char(s(i+7)); kon_h=kon_tim(1:2); kon_mi=kon_tim(4:5); kon_s='0'; poc_date=datenum(str2num(poc_y),str2num(poc_m),str2num(poc_d), ... str2num(poc_h),str2num(poc_mi),str2num(poc_s)); kon_date=datenum(str2num(kon_y),str2num(kon_m),str2num(kon_d), ... str2num(kon_h),str2num(kon_mi),str2num(kon_s)); %je-li stejne datum mezi poc_date a kon_date - vymazat cely radek cc=not(c(:,2)>=poc_date & c(:,2)<=kon_date); b=c(find(cc),:); c=b; clear('b'); clear('cc'); end; end; %end if exist %precist soubor s intervaly pro korekci hodnoty eoar o konstantu v danem intervalu alfa='korekce posunem eoar val_shift' if exist('val_shif.dat') s=textread('val_shif.dat','%s'); for i=1:9:length(s) poc_y=char(s(i)); poc_m=char(s(i+1)); poc_d=char(s(i+2)); poc_tim=char(s(i+3)); poc_h=poc_tim(1:2); poc_mi=poc_tim(4:5); poc_s='0'; kon_y=char(s(i+4)); kon_m=char(s(i+5)); kon_d=char(s(i+6)); kon_tim=char(s(i+7)); kon_h=kon_tim(1:2); kon_mi=kon_tim(4:5); kon_s='0'; poc_date=datenum(str2num(poc_y),str2num(poc_m),str2num(poc_d), ... str2num(poc_h),str2num(poc_mi),str2num(poc_s)); kon_date=datenum(str2num(kon_y),str2num(kon_m),str2num(kon_d), ... str2num(kon_h),str2num(kon_mi),str2num(kon_s)); shift=str2num(char(s(i+8))); %je-li datum mezi poc_date a kon_date - pricist posun for i=1 : length(c) if ((c(i,2)>=poc_date) & (c(i,2)<=kon_date)) c(i,3)=c(i,3)+shift; end; end; end; end; %end if exist %precist soubor s intervaly pro korekci hodnoty eoar vynasobenim v danem intervalu alfa='korekce nasobenim eoar val_mult' if exist('val_mult.dat') s=textread('val_mult.dat','%s'); for i=1:9:length(s) poc_y=char(s(i)); poc_m=char(s(i+1)); poc_d=char(s(i+2)); poc_tim=char(s(i+3)); poc_h=poc_tim(1:2); poc_mi=poc_tim(4:5); poc_s='0'; kon_y=char(s(i+4)); kon_m=char(s(i+5)); kon_d=char(s(i+6)); kon_tim=char(s(i+7)); kon_h=kon_tim(1:2); kon_mi=kon_tim(4:5); kon_s='0'; poc_date=datenum(str2num(poc_y),str2num(poc_m),str2num(poc_d), ... str2num(poc_h),str2num(poc_mi),str2num(poc_s)); kon_date=datenum(str2num(kon_y),str2num(kon_m),str2num(kon_d), ... str2num(kon_h),str2num(kon_mi),str2num(kon_s)); multiplikator=str2num(char(s(i+8))); %je-li datum mezi poc_date a kon_date - pricist posun for i=1 : length(c) if ((c(i,2)>=poc_date) & (c(i,2)<=kon_date)) c(i,3)=c(i,3)*multiplikator; end; end; end; end; %end if exist %precist soubor s intervaly pro posun casu o dany pocet hodin v danem intervalu alfa='korekce posunem casu tim_shift' if exist('tim_shif.dat') s=textread('tim_shif.dat','%s'); for i=1:9:length(s) poc_y=char(s(i)); poc_m=char(s(i+1)); poc_d=char(s(i+2)); poc_tim=char(s(i+3)); poc_h=poc_tim(1:2); poc_mi=poc_tim(4:5); poc_s='0'; kon_y=char(s(i+4)); kon_m=char(s(i+5)); kon_d=char(s(i+6)); kon_tim=char(s(i+7)); kon_h=kon_tim(1:2); kon_mi=kon_tim(4:5); kon_s='0'; poc_date=datenum(str2num(poc_y),str2num(poc_m),str2num(poc_d), ... str2num(poc_h),str2num(poc_mi),str2num(poc_s)); kon_date=datenum(str2num(kon_y),str2num(kon_m),str2num(kon_d), ... str2num(kon_h),str2num(kon_mi),str2num(kon_s)); shift=str2num(char(s(i+8))); %je-li datum mezi poc_date a kon_date - zavest posun casu for i=1 : length(c) if ((c(i,2)>=poc_date) & (c(i,2)<=kon_date)) c(i,2)=c(i,2)+shift/24; end; end; end; end; %end if exist %posun casu muze generovat radky navic - ty je treba odstranit %pomoci sortrows je setridit podle data alfa='mazani radku vyniklych navic posunem v case' b=sortrows(c,2); clear('c'); %porovnavat predchozi a nasledujici radek %je-li stejne datum - vymazat cely radek j=1; c(j,:)=b(j,:); for i=2 : length(b) if b(i,2)~=c(j,2) j=j+1; c(j,:)=b(i,:); end; end; clear('b'); %porovnavat predchozi a nasledujici radek %kdyz se lisi o pul hodinu (cas je ve dnech) - OK alfa='kontrola celistvosti rad' %kdyz se lisi mene nez o pul hodinu odstranit data %realizovano jako odstraneni dat, ktera nejsou v celou nebo v pul alfa='mazani hodnot hustsich nez pulhodina' j=1; %for i=2:length(c) % a=datestr(c(i,2)); % [Y,M,D,H,MI,S] = datevec(a); % if ((MI==15) | (MI==45)) %mazat % j=j; % else %kopirovat % b(j,:)=c(i,:); % j=j+1; % end %end a(1:length(c),:)=datestr(c(:,2)); [Y,M,D,H,MI,S] = datevec(a); mazat=not((MI==15) | (MI==45)); b=c(find(mazat),:); c=b; clear('a'); clear('b'); %kdyz se lisi vice, vlozit data a do jednoho sloupecku interpolovane EOAR, % do posledniho nic - ponechat mezeru alfa='interpolace po pulhodine - doplneni mezer' step=0.5000; %definice kroku mereni j=1; b(j,:)=c(j,:); for i=2:length(c) t_dif=(c(i,2)-c(i-1,2))*24; if t_dif>step+0.00001 %interpolace for k=1:round(t_dif*2) j=j+1; if k==round(t_dif*2) b(j,1)=c(i,1); else b(j,1)=0; end b(j,2)=c(i-1,2)+k*step/24; b(j,3)=c(i-1,3)+(b(j,2)-c(i-1,2))*(c(i,3)-c(i-1,3))/(c(i,2)-c(i-1,2)); end else j=j+1; b(j,:)=c(i,:); end; end c=b; clear('b'); %vytvorime sloupecek originalnich hodnot EOAR alfa='generace vystupu - originalni data' for i=1:length(c) if c(i,1)==0 b(i)=cellstr(' '); else b(i)=cellstr(num2str(c(i,3))); end end b=char(b); %vypsat vysledny soubor alfa='generace vystupu vypis dat' a=cellstr(datestr(c(:,2))); a=char(a); fid = fopen('eoar.dat','w'); fprintf(fid,'"orig. nr." "date num." "EOAR" "date str" "orig. EOAR"\n'); for i=1:length(a) fprintf(fid,'%6.0f %15.7E %6.1f "%s" %s \n',c(i,1),c(i,2),c(i,3),a(i,:),b(i,:)); end; status = fclose(fid);