GNU Octave 입력과 출력

GNU Octave 입력과 출력

Octave 프로그램이 결과를 화면에 보여주고, 데이터를 파일로 저장하고 읽어들이는 방법을 살펴볼게요. 화면 출력의 형식 제어부터 파일 I/O까지 — 계산 결과를 "밖으로 내보내는" 모든 경로를 다뤄요.

출처: GNU Octave 입력과 출력

본문

터미널 출력

Octave는 표현식을 평가하자마자 그 값을 출력하므로, 가장 단순한 I/O 함수는 그냥 표현식 자체예요. 다만 변수 이름(또는 ans)도 함께 출력돼요. 이름 없이 값만 출력하려면 disp를 써요.

disp ("The value of pi is:"), disp (pi)
-| the value of pi is:
-| 3.1416

disp 출력은 항상 줄바꿈으로 끝나요. 출력 값을 요청하면 아무것도 출력하지 않고 형식화된 문자열을 반환해요. fdisp (fid, x)는 파일 포인터 fid 스트림에 값을 출력해요.

format 명령은 disp와 일반 에코 메커니즘이 값을 출력하는 방식을 제어해요. 표시만 바꾸지 저장·계산 방식은 바꾸지 않아요. 기본값은 사람이 읽기 좋은 5유효숫자(short). 주요 옵션은 아래와 같아요.

  • short / long — 고정 소수점 5/16 유효숫자.
  • shorte / longe — 지수 형식(가수와 지수 분리).
  • shortg / longg — 값의 크기에 따라 고정·지수 중 최적 선택.
  • shorteng / longeng — 지수가 3의 배수인 공학 형식.
  • bank — 통화 형식(소수점 아래 2자리).
  • hex / bit — 메모리의 비트/16진수 표현.
  • rat — 유리수 근사(예: pi355/113).
  • compact / loose — 행렬 사이 공백 줄 조절.

format은 숫자의 표시에만 영향이 있고, 내부 표현을 바꾸려면 single, uint8 같은 변환 함수를 써야 해요.

파일 저장과 불러오기: save / load

saveload 명령으로 데이터를 디스크 파일에 쓰고 읽어요. 기본 파일 형식은 save_default_optionssave_precision으로 제어할 수 있어요.

A = [ 1:3; 4:6; 7:9 ];
save myfile.mat A
load myfile.mat

save는 이름을 지정하지 않으면 현재 범위의 모든 변수를 저장해요. -struct STRUCT 수정자를 쓰면 구조체의 필드를 변수처럼 저장하고, 특정 필드만 고를 수도 있어요. 유효 옵션으로는 -append(덮어쓰지 않고 추가), -ascii(헤더 없는 텍스트, 행렬만), -binary(Octave 바이너리), -hdf5(HDF5 형식, 라이브러리 링크 필요), -text(기본, Octave 텍스트), -v7/-v6/-v4(MATLAB 바이너리), -zip(gzip 압축) 등이 있어요. 저장할 변수 목록에는 와일드카드 패턴(?, *, [list])을 쓸 수 있어요.

save -binary data a b*   # a와 b로 시작하는 모든 변수를 바이너리 형식으로

save_precision은 텍스트 형식 저장 시 유지할 자릿수를 지정해요(기본 17, double 무손실 저장의 최솟값). save_header_format_string은 텍스트 파일 맨 앞 주석 줄의 형식을 정해요.

load는 변수를 명시하지 않으면 파일의 모든 변수를 불러와요. 파일 형식은 자동 감지하지만 옵션으로 강제할 수 있어요. -ascii(순수 숫자 행렬), -binary, -hdf5, -text, -v7/-v6/-v4(MATLAB 형식) 등이 있어요. load는 Octave 텍스트·바이너리, MATLAB 바이너리, CSV 등 많은 단순 형식을 읽을 수 있고, zlib 지원으로 컴파일하면 gzip 압축 파일도 읽어요. 단일 출력 인자로 호출하면 파일의 데이터를 심볼 테이블에 넣는 대신 그 출력에 대입해요.

텍스트 파일 I/O

dlmwrite는 구분자로 나눈 텍스트 파일로 수치 행렬을 쓰고, dlmread는 읽어요. 기본 구분자는 쉼표예요.

dlmwrite ("file.csv", reshape (1:16, 4, 4));
dlmwrite ("file.tex", a, "delimiter", "&", "newline", "\n")

csvwrite/csvread는 CSV 전용이에요(dlmwrite (file, x, ",")와 동일). csvread는 숫자만 있는 CSV만 읽어요. fileread (filename)은 파일 전체 내용을 문자열로 읽어요("Encoding" 옵션 지원).

구조화된 텍스트 데이터는 textscan으로 파싱해요. 형식 지정자(%f double, %d/%u 정수, %s 문자열, %q 따옴표 문자열, %c 문자, %[...] 문자 집합 등)로 파일이나 문자열을 읽어 셀 배열로 반환해요.

str = "Bunny Bugs 5.5\nDuck Daffy -7.5e-5\nPenguin Tux 6";
a = textscan (str, "%s %s %f");

textscan은 구분자, 공백, 주석, 헤더 줄, 빈 값, 오류 시 동작 등 다양한 속성/값 옵션을 지원해요. 예전 함수 textreadtextscan을 쓰도록 권장되며 구식(obsolete)이에요. importdata는 ASCII 표, 이미지, MATLAB 파일, 스프레드시트, WAV 등 다양한 파일 형식을 가져와요.

더 알아보기