728x90
반응형
자동화 계의 절대적 함수 eval
matlab 명령어를 문자열로 만들어 eval함수에 넣는다면, 그 명령어를 eval을 사용한 위치에서 실행시킬 수 있다.
예를들어 a=b+1;을 실행시키는것을
a=0;
b=1;
str="a=b+1";
eval(str)
로 실행시킬 수 있다.
예를들어 loop에서 변수이름을 바꾸면서 loop를 반복하고 싶을 때 loop를 돌리면서 문자열을 수정하면서 명령어를 만들어 eval에 넣는다면 그대로 실행이된다.
for File_index=1:1:length(folder)
str=folder(File_index).name;
str_new=str(1:strfind(str,'.')-1);
eval("D"+str_new+"_x=data(:,1);");
%eval("D"+str_new+"_y=-sqrt(data(:,2).^2-data(:,3).^2);");
eval("D"+str_new+"_y=data(:,2);");
save_data=[save_data + " D"+str_new+"_x"+ " D"+str_new+"_y" ];
end
eval("save "+save_data);
이게 별거 아닌것처럼 보여도 deep한 프로그래밍 없이 matlab 프로그램에 엄청난 자유도를 준다.
Bug를 만들어내지 않는 불멸의 입출력 함수 fgetl
for File_index=1:1:length(folder)
try
data = load(folder(File_index).name);
catch
disp('something strange is in file head');
data=0;
fileID=fopen(folder(File_index).name);
file_index=1;
file_check=0;
while 1
tline = fgetl(fileID);
if ~ischar(tline), break, end
if file_check<jump_num
else
S_data=split(tline);
data(file_index,1:array_legth)=str2double(S_data);
file_index=file_index+1;
end
file_check=file_check+1;
end
fclose(fileID);
end
str=folder(File_index).name;
str_new=str(1:strfind(str,'.')-1);
eval("D"+str_new+"_x=data(:,1);");
%eval("D"+str_new+"_y=-sqrt(data(:,2).^2-data(:,3).^2);");
eval("D"+str_new+"_y=data(:,2);");
save_data=[save_data + " D"+str_new+"_x"+ " D"+str_new+"_y" ];
end
end
반응형
'Others' 카테고리의 다른 글
라즈베리파이 - python3 환경 구축 (0) | 2019.10.19 |
---|---|
블로그에 공식 쓰기 (0) | 2019.05.20 |
까먹기 쉬운 python 함수 (0) | 2019.05.14 |
Mac에 최적화된 사항 (0) | 2019.05.12 |
Lock in measurement (2) | 2018.10.24 |