save_struct_txt
Control & Dynamics + Data I/O 중심의 Octave 학습 예제
mylib/inst/save_struct_txt.m
함수 시그니처
function save_struct_txt(filename, s) 전체 코드
전체 코드를 복사해서 Octave에서 바로 실행할 수 있습니다.
function save_struct_txt(filename, s)
% save_struct_txt - 구조체 데이터를 텍스트 파일로 저장하는 함수
%
% 입력:
% filename (문자열): 데이터를 저장할 텍스트 파일의 이름 및 경로.
% s (구조체): 저장할 데이터가 포함된 구조체. 각 필드는 숫자 배열 또는 문자열을 포함할 수 있다.
%
% 출력:
% 파일에 구조체의 각 필드가 'key = value' 형식으로 기록된다.
%
% 설명:
% 이 함수는 주어진 구조체 s의 각 필드를 순회하며, 각 필드의 이름과 값을
% 텍스트 파일에 저장한다. 숫자 배열은 MATLAB의 mat2str 함수를 사용해
% 문자열 형태(예: '[1 2 3]')로 변환되어 기록된다.
%
% 예제:
% s.frequency = [10 20 30 40 50];
% s.phase = [0 0 0 0 0];
% s.amplitude = [1 0.5 0.3 0.2 0.1];
% s.fs = 1000;
% s.duration = 0.5;
% save_struct_txt('s1.txt', s);
% 파일을 쓰기 모드('w')로 오픈. 파일이 존재하면 덮어쓰고, 존재하지 않으면 새로 생성.
fid = fopen(filename, 'w');
if fid == -1
error('파일 열기에 실패했습니다: %s', filename);
end
% 구조체 s의 모든 필드명을 cell 배열로 가져옴.
fields = fieldnames(s);
% 각 필드에 대해 반복 수행.
for i = 1:numel(fields)
% 현재 필드의 이름과 해당 필드의 값을 가져옴.
field_name = fields{i};
field_value = s.(field_name);
% 만약 필드 값이 숫자(스칼라, 벡터, 행렬)인 경우,
% mat2str 함수를 사용하여 숫자 배열을 문자열로 변환.
if isnumeric(field_value)
% fprintf를 사용하여 '필드명 = 값' 형태로 기록.
% mat2str 함수는 숫자 배열을 MATLAB 코드 형식의 문자열로 변환한다.
fprintf(fid, '%s = %s\n', field_name, mat2str(field_value));
else
% 숫자가 아닌 경우(예: 문자열), 그대로 기록.
fprintf(fid, '%s = %s\n', field_name, field_value);
end
end
% 파일 작업 완료 후 반드시 파일을 닫음.
fclose(fid);
end 코드 해설
목적
Control & Dynamics + Data I/O 중심의 Octave 학습 예제
입력
- 파라미터: filename
- 파라미터: s
출력
- 연산 결과 변수 또는 화면 출력 결과를 확인합니다.
실행 흐름
- save_struct_txt - 구조체 데이터를 텍스트 파일로 저장하는 함수
- 입력
- filename (문자열): 데이터를 저장할 텍스트 파일의 이름 및 경로
- s (구조체): 저장할 데이터가 포함된 구조체. 각 필드는 숫자 배열 또는 문자열을 포함할 수 있다
- 출력
핵심 함수/주제
fprintferrorfclosefieldnamesfilenamefopenisnumericmat2str
실습 과제
- 질량/감쇠/강성 또는 전달함수 계수를 바꿔 응답 변화를 확인해보세요.
- 핵심 함수 fprintf의 인자를 한 가지 바꿔 결과 변화를 기록해보세요.
- "save_struct_txt - 구조체 데이터를 텍스트 파일로 저장하는 함수 -> 입력" 흐름을 함수 단위로 분리해 리팩터링해보세요.
학습 팁
같은 카테고리의 다른 코드
- clamp
mylib/inst/clamp.m - decibell_overall
mylib/inst/decibell_overall.m - generate_impulse_force
mylib/inst/generate_impulse_force.m - generate_sinusoid
mylib/inst/generate_sinusoid.m - load_struct_txt
mylib/inst/load_struct_txt.m - make_axes
mylib/inst/make_axes.m - my_diff
mylib/inst/my_diff.m - my_mean
mylib/inst/my_mean.m - my_rms
mylib/inst/my_rms.m - my_std
mylib/inst/my_std.m