load_struct_txt
Data I/O 중심의 Octave 학습 예제
mylib/inst/load_struct_txt.m
함수 시그니처
function s = load_struct_txt(filename) 전체 코드
전체 코드를 복사해서 Octave에서 바로 실행할 수 있습니다.
function s = load_struct_txt(filename)
% load_struct_txt - 텍스트 파일을 구조체로 로드하는 함수
%
% 입력:
% filename (문자열): 불러올 텍스트 파일의 이름 및 경로.
%
% 출력:
% s (구조체): 파일에서 읽어온 데이터를 저장한 구조체.
%
% 설명:
% 이 함수는 'key = value' 형식으로 저장된 텍스트 파일을 읽어와 구조체로 변환한다.
% 값이 숫자인 경우 자동으로 변환되며, 배열 '[1 2 3]' 형식도 처리된다.
% key는 구조체의 필드명이 되며, value는 숫자 배열 또는 문자열로 저장된다.
%
% 예제:
% s = load_struct_txt('s1.txt');
% disp(s.frequency); % [10 20 30 40 50]
% disp(s.fs); % 1000
% disp(s.yrng); % [0 0.5]
% 빈 구조체 생성 (파일의 데이터를 저장할 컨테이너 역할)
s = struct();
% 파일을 읽기 모드('r')로 오픈
fid = fopen(filename, 'r');
if fid == -1
error('파일을 열 수 없습니다: %s', filename);
end
% 파일 끝까지 한 줄씩 읽으며 반복
while ~feof(fid)
line = fgetl(fid); % 한 줄 읽기
if ischar(line) % 줄이 유효한 문자열인지 확인
% ' = ' 구분자로 필드명과 값 분리
parts = strsplit(line, ' = ', 'collapsedelimiters', false);
% 유효한 'key = value' 형식인지 확인
if numel(parts) == 2
field_name = strtrim(parts{1}); % 필드명 (공백 제거)
field_value = strtrim(parts{2}); % 필드값 (공백 제거)
% 필드값이 숫자로 변환 가능한지 확인
num_value = str2num(field_value);
if ~isempty(num_value)
% 변환 가능하면 숫자로 저장
s.(field_name) = num_value;
else
% 변환 불가능하면 문자열로 저장
s.(field_name) = field_value;
end
end
end
end
% 파일 읽기 완료 후 닫기
fclose(fid);
end 코드 해설
목적
Data I/O 중심의 Octave 학습 예제
입력
- 파라미터: filename
출력
- 반환값: s
- 콘솔 텍스트 출력
실행 흐름
- 입력
- 출력
- s (구조체): 파일에서 읽어온 데이터를 저장한 구조체
- 빈 구조체 생성 (파일의 데이터를 저장할 컨테이너 역할)
핵심 함수/주제
dispstrtrimerrorfclosefeoffgetlfilenamefopen
실습 과제
- 핵심 함수 disp의 인자를 한 가지 바꿔 결과 변화를 기록해보세요.
- "입력 -> 출력" 흐름을 함수 단위로 분리해 리팩터링해보세요.
학습 팁
같은 카테고리의 다른 코드
- 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 - 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 - my_sum
mylib/inst/my_sum.m