load_struct_txt

Data I/O 중심의 Octave 학습 예제

mylib/inst/load_struct_txt.m

코드 인덱스로 돌아가기

카테고리

mylib Utilities

학습 소스 그룹

코드 길이

58

lines

작성자

-

날짜 정보 없음

패키지

none

pkg load 기준

함수 시그니처

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
  • 콘솔 텍스트 출력

실행 흐름

  1. 입력
  2. 출력
  3. s (구조체): 파일에서 읽어온 데이터를 저장한 구조체
  4. 빈 구조체 생성 (파일의 데이터를 저장할 컨테이너 역할)

핵심 함수/주제

dispstrtrimerrorfclosefeoffgetlfilenamefopen

실습 과제

  • 핵심 함수 disp의 인자를 한 가지 바꿔 결과 변화를 기록해보세요.
  • "입력 -> 출력" 흐름을 함수 단위로 분리해 리팩터링해보세요.

학습 팁

같은 카테고리의 다른 코드