matlab for c/c++ programmers - ita.kaist.ac.kr · pdf filematlab programming matlab file i/o...

55
MATLAB Programming 오늘 강의 내용 (2014/01/17) 파일 입출력 MATLAB에서 계산한 데이터를 바이너리 파일 또는 텍스트 파일의 형태로 디스크에 저장 디스크에 저장된 파일을 MATLAB workspace 상으로 읽어오기 1

Upload: buimien

Post on 06-Feb-2018

332 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

오늘 강의 내용 (2014/01/17)

파일 입출력

• MATLAB에서 계산한 데이터를 바이너리 파일 또는 텍스트 파일의

형태로 디스크에 저장

• 디스크에 저장된 파일을 MATLAB workspace 상으로 읽어오기

1

Page 2: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

파일 입출력

2

Page 3: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

MATLAB File I/O

여러 종류의 함수 제공

• 이진화 된 파일(binary file)의 읽고 쓰기

• 형식화 된 파일(formatted ASCII)의 읽고 쓰기

파일 입출력 함수

• save, load 함수

– MATLAB에서 사용하는 데이터 타입을 저장 및 불러오기

• dlmread, dlmwrite

– 사용자가 지정한 구분자 (delimiter) 형태로 텍스트 파일에 저장

• cvsread, cvswrite

– 컴마로 구분된 형태로 데이터를 텍스트 파일에 저장

• xlsread, xlswrite

– 데이터를 Microsoft Excel에 저장하고, 읽어오기 위한 함수

• Low Level File I/O

– C에서 사용하는 파일 입출력 함수들과 거의 동일

3

Page 4: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

>> save 파일명

4

save 파일명

• workspace 상의 모든 변수를 MATLAB

저장 형식으로 “파일명”의 이름을 갖는

파일에 저장

Page 5: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

>> save 파일명 변수명

5

save 파일명 변수명

• workspace 상에서 “변수명”으로

지정한 변수를 MATLAB 저장

형식으로 “파일명”의 파일에 저장

Page 6: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

>> save 파일명 변수명 변수명 …

6

save 파일명 변수명 변수명 …

• workspace 상에서 “변수명”으로

지정된 모든 변수들을 MATLAB 저장

형식으로 “파일명”의 파일에 저장

Page 7: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

>> save 파일명 변수명 옵션

7

save 파일명 변수명 옵션

• workspace 상에서 “변수명”으로 지정한

변수를 “옵션”에서 지정한 형식으로

“파일명”의 파일에 저장

• 여기서는, 데이터를 8-digit ASCII 포맷 (즉,

텍스트 포맷) 으로 저장

Page 8: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

>> save 파일명 변수명 옵션

8

M_ascii.txt 파일

더블 클릭시

Page 9: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

>> save 파일명 변수명 옵션

여러 가지 옵션

• -ascii

– 8-digit ASCII 형식으로 저장

• -ascii -double

– 16-digit ASCII 형식으로 저장

• -ascii -tabs

– tab에 의해 분리된 데이터를 8-digit ASCII 형식으로 저장

• -ascii -double -tabs

– tab에 의해 분리된 데이터를 16-digit ASCII 형식으로 저장

9

Page 10: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

>> save 파일명 변수명 옵션

10

M_ascii.txt 파일

더블 클릭시

아래와 같이 double 옵션을 주어 저장한 경우

>> save M_ascii.txt M -ascii -double

Page 11: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

>> save 파일명 변수명 옵션

11

M_ascii.txt 파일

더블 클릭시

아래와 같이 tabs 옵션을 주어 저장한 경우

>> save M_ascii.txt M -ascii -tabs

Page 12: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

save 함수

MAT 파일 저장

• >> save(‘MAT-파일’, ‘변수명‘, ‘변수명’, …)

• Workspace 상에 변수 M, N이 정의되어 있을 때,

• >> save( ‘test.mat’, ‘M’, ‘N’ )

ASCII 형태로 저장

• >> save(‘ASCII-파일’, ‘변수명’, ‘옵션’, ‘옵션’)

• Workspace 상에 변수 M이 정의되어 있을 때,

• >> save( ‘test.txt’, ‘M’, ‘-ascii’, ‘-double’ )

12

ASCII 파일로 저장하는 경우,

변수를 여러 개 동시에 저장할 수 없음

Page 13: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

복소수의 저장

13

• 복소수를 ASCII 형식의 파일에

저장하려고 하면, 경고가 뜸

• 복소수의 허수부는 저장되지 않음!!

Page 14: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

복소수의 저장

14

복소수를 ASCII 형식의 파일에

저장하려고 하면, 복소수의 허수부는

저장되지 않음!!

M_ascii.txt 파일

더블 클릭시

복소수의 허수부가 모두 사라짐!!

복소수는 반드시 MAT 파일 형태로 저장 하거나,

구분자 (delimiter)를 사용한 텍스트 파일로 저장해야 함

Page 15: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

Workspace 변수 값 간편하게 저장하기

15

- Workspace 창에서 마우스 우측 버튼 클릭

- save 버튼 선택하여 모든 변수들 저장

- 각 변수를 클릭하고, 마우스 우측 버튼

누르면 해당 변수만 저장 가능

Page 16: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

>> load 파일명

16

load 파일명

• “파일명” 이름을 갖는 파일로부터

데이터를 읽어와서 workspace 상의

변수에 대입함

Page 17: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

>> load 파일명

17

load 파일명

• “파일명” 이름을 갖는 파일로부터

데이터를 읽어와서 workspace 상의

변수에 대입함

Page 18: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

>> load 파일명

18

.mat 파일

• 확장자 (.mat)을 제외한 파일 이름

만으로 데이터를 읽어올 수 있음

Page 19: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

>> 변수명 = load(파일명)

19

변수명 = load(파일명)

• 변수명은 struct() 타입으로 되어,

파일에 저장되어 있는 각 MATLAB

데이터들은 struct의 원소로 들어감

Page 20: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

Current Folder의 파일 더블클릭

20

myfile.mat 파일

더블 클릭시

더블 클릭만으로 데이터를 읽어올 수 있음

Page 21: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

MAT-file의 저장된 변수명 알아오기

21

whos(‘-file’, 파일명)

Page 22: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

일부 변수만 불러오기

22

load 파일명 변수명

• “파일명” 파일로부터 “변수명” 으로

적힌 변수들만을 workspace 상으로

읽어옴

Page 23: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

Quiz

문제 1. 다음은 무작위로 주어진 3차원 공간 상의 점들을 보간 (interpolation)법을

통해 3차원 그래프를 그리는 코드이다.

무작위로 주어진 각 점들의 좌표값과 보간하여 얻어낸 그래프의 좌표 정보를

MAT 파일로 저장하라. (즉, x, y, z, X, Y, Z) 값을 저장

23

Page 24: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

Quiz

문제 2. 문제 1에서 3차원 공간상의 점들과, 그래프에 대한 각 좌표값들을 MAT

파일에 저장하였다. 저장한 좌표값들을 MAT 파일로부터 읽어와서 아래 그래프를

복원하려고 한다.

그래프를 복원할 때, 공간상의 점들로부터 보간법으로 그리는 것이 아니라, MAT

파일로부터 읽어온 그래프의 좌표 값을 mesh 함수를 이용하여 그리자.

24

Page 25: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

Quiz Sol.

25

좌표값을 MAT 파일에 저장

좌표값을 MAT 파일에서 읽어오기

그래프 복원

Page 26: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

외부에서 생성한 데이터 읽어오기

26

메모장에서 데이터

작성 및 저장한 후

MATLAB에서 불러오기

Page 27: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

CVS 파일 (콤마로 구분된 데이터)로 저장하기

27

MATLAB 에서 cvswrite

함수를 사용하여 CVS

형식으로 저장하면, 각

데이터가 콤마로 구분

Page 28: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

사용자 지정 구분자로 데이터 저장하기

28

dlmwrite 함수에서

구분자(delimiter)를 ‘|’로

주면, 각 데이터가 | 로 구분

dlmwrite( 파일명, 저장할 변수명, ‘delimiter’, 구분자로 사용할 문자)

Page 29: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

사용자 지정 구분자 데이터 읽어오기

29

dlmwrite로 저장한 텍스트 데이터

파일을 load 함수로 읽어오게 되면 모든

데이터를 정확하게 읽어오지 못함

dlmread( 파일명, 구분자로 사용한 문자)

Page 30: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

복소수를 텍스트 파일에 저장, 텍스트 파일로부터 읽어오기

30

각각의 복소수가 구분자 ‘|’ 로 구분됨

Page 31: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

Excel 데이터 읽어오기

31

xlsread( 파일명 )

Excel의 첫 번째 sheet의 모든

데이터를 가져옴

특정 셀의 데이터가 비어있다면,

MATLAB은 NaN으로 처리

Page 32: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

Excel 데이터 읽어오기 (특정 범위 데이터 읽어오기)

32

xlsread( 파일명, 읽어올 영역 )

Excel의 첫 번째 sheet의 B2:C4

영역의 데이터를 가져옴

Page 33: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

Excel 데이터 읽어오기 (특정 sheet 데이터 읽어오기)

33

xlsread( 파일명, 읽어올 시트 )

Excel의 sheet 3의 모든

데이터를 가져옴

Page 34: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

MATLAB 변수를 Excel에 저장하기

34

xlswrite( 파일명, 저장할 변수명, Excel Sheet 이름)

• sheet 이름 생략하면 Sheet1에 저장됨

Page 35: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

MATLAB 변수를 Excel 특정 영역에 저장하기

35

xlswrite( 파일명, 저장할 변수명, Excel Sheet, 영역)

• sheet 이름 생략하면 Sheet1에 저장됨

Page 36: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

MATLAB 변수를 Excel 특정 영역에 저장하기

36

새로운 데이터를 기존 엑셀 파일에서

데이터가 존재하는 부분에 덮어씀

Page 37: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

uiimport : 파일에서 데이터 가져오기

37

• 프롬프트에서 >> uiimport라고 입력

• 데이터를 파일에서 읽어올 지, 클립보드에서 읽어올지 선택

• 여기서는 dlm_test.txt 파일을 읽어옵시다.

Page 38: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

uiimport : 파일에서 데이터 가져오기

38

dlm_test.txt 파일을 읽어옴

• 1. 각 행에 있는 데이터들이 모두 하나로 붙어 있음

• 2. 데이터를 잘 잘라주기 위해 delimiter를 선택

Page 39: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

uiimport : 파일에서 데이터 가져오기

39

• 1. 각 행에 있는 데이터들이 모두 하나로 붙어 있음

Page 40: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

uiimport : 파일에서 데이터 가져오기

40

import할 모든 데이터

선택 후 버튼 클릭

Page 41: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

uiimport : 클립보드에서 데이터 가져오기

1. 텍스트 파일 또는 엑셀 파일에서 데이터 선택하고, Ctrl+C 또는

“복사하기” 누름

• 20x20_magic_matrix.txt 파일을 열어, 전체를 선택하고 ctrl+c 하여 복사

41

Page 42: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

uiimport : 클립보드에서 데이터 가져오기

2. 프롬프트에서 >> uiimport 입력하고, clipboard 버튼 선택

42

Page 43: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

uiimport : 클립보드에서 데이터 가져오기

3. 클립 보드에 들어있는 데이터를 읽음

43

Page 44: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

파일 입출력을 위한 Dialog Box

uigetfile : 파일을 가져오기 위한 dialog box

44

Page 45: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

파일 입출력을 위한 Dialog Box

uiputfile : 파일을 저장하기 위한 dialog box

45

Page 46: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

Low Level File I/O

지금까지 학습한 파일 입출력 방법은 데이터의 크기 등이 균일해야 함

서로 다른 데이터 타입, 서로 다른 크기의 데이터가 혼재되어 있는

파일을 읽고 쓰기 위해서는 저수준 파일 입출력 함수들을 이용해야 함

파일 열기

• fid = fopen( 파일명, 모드)

– fid는 파일 식별자 (file identifier)

파일 닫기

• st = fclose( fid )

– 파일 닫기 성공시 0 리턴

– 파일 닫기 실패시 1 리턴

46

모드 모드에 따른 파일 입출력 작동

r 읽기 전용으로 파일을 연다

r+ 읽기, 쓰기 겸용으로 파일을 연다.

w

주어진 파일명을 갖는 새로운 파일을 만든다. 주어진 파일명과 동일한 파일이 있으면, 파일을 지우고

새롭게 파일을 만든다. 만들어진 파일을 쓰기 위해서 연다.

w+

주어진 파일명을 갖는 새로운 파일을 만든다. 주어진 파일명과 동일한 파일이 있으면, 지우고 새롭게

파일을 만든다. 만들어진 파일을 읽고 쓰기 위해서

연다.

a

새로운 파일을 만들고 연다. 같은 이름의 파일이 존재하면 쓰기 위해서 파일을 연다. 데이터를 쓰면,

그 데이터는 파일의 끝에 덧붙는다.

a+

새로운 파일을 만들고 연다. 같은 이름의 파일이 존재하면 읽고, 쓰기 위해서 파일을 연다. 데이터를

쓰면, 그 데이터는 파일의 끝에 덧붙는다.

Page 47: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

Low Level File I/O

fprintf 함수

• count = fprintf( fid, format, A, … )

– 파일 식별자 fid를 갖는 파일에 A와 그 뒤에 입력되는 변수들의 값을 forma에

맞추어서 쓴다.

– 쓰여진 데이터의 bytes 수를 count 변수에 반환한다.

– fid 생략하면 화면에 출력

47

생성된 fprintf_test.txt 파일

Page 48: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

Low Level File I/O

fprintf 함수

• format의 의미

48

%-12.5f

Format의 시작을 의미

Flag

Field width

Precision

Conversion Specifier

Conversion

Specifier 의미

%c 하나의 문자 표시

%d 십진법으로 표시

%e 지수 형태로 표시 (소문자 e 이용)

%E 지수 형태로 표시 (대문자 E 이용)

%f 고정 소수점으로 표시

%g 중요하지 않은 0 표시하지 않음

%e, %f 보다 간결한 표현

%o 8진법으로 표시

%s 문자열로 표시

%u 부호가 없는 십진법으로 표시

%x 16진법으로 표시 (소문자 a-f)

%X 16진법으로 표시 (대문자 A-F)

Flag 의미 예

- 주어진 field의 왼쪽으로 정렬 %-8.2d

+ 부호 표시 %+8.2d

0 빈공간에 0 채움 %08.2d

Page 49: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

Low Level File I/O

49

Page 50: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

Low Level File I/O

fscanf 함수 : 데이터를 지정한 format에 맞게 읽어 들이는 함수

• A = fscanf( fid, format, size )

– 파일 식별자 fid를 갖는 파일로부터 format에 지정된 형식으로 데이터를 size 개수

만큼 읽어 들임

– 읽어 들인 데이터는 열 벡터의 형태로 반환하여 A 변수에 저장

50

읽어들이고자 하는 fscanf_test.txt

Page 51: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

Low Level File I/O

fscanf 함수

• A = fscanf( fid, format, size )

– size 가 [M N]으로 설정되면, M x N 크기를 갖는 행렬의 형태로 읽어 들임

– size가 inf가 되면, 주어진 파일의 끝까지 읽어 들임

51

읽어들이고자 하는 fscanf_mat_test.txt

Page 52: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

Quiz

아래와 같이 다양한 형식의 정보가 혼합된 데이터를 파일로부터 읽어 와서, 구조체 배열에 저장해 봅시다.

52

measurement.txt

구조체 배열

meas(1)

time : 12:00:00

date : 01-Jan-1977

dat: [4.21 6.55 6.78 6.55; …]

meas(2) meas(3)

Page 53: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

Quiz Sol.

53

Page 54: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

Quiz

아래 그래프를 그리기 위해 다음과 같이 X, Y, Z 값을 계산하면 된다.

X, Y, Z 값은 각각 21 x 21 크기의 행렬로 구성되어 있다. X, Y, Z 행렬(좌표값)을 surf_plot.txt

파일에 저장했다가, surf_plot.txt 파일에 저장된 데이터 값 (좌표값)을 읽어서 동일한

그래프를 그려보자.

54

>> t = 0:pi/10:2*pi;

>> [X,Y,Z] = cylinder(1+cos(t).*sin(2*t));

>> surf( X, Y, Z);

파일에

좌표값

저장 좌표

복원

좌표

저장

Page 55: MATLAB for C/C++ Programmers - ita.kaist.ac.kr · PDF fileMATLAB Programming MATLAB File I/O 여러 종류의 함수 제공 • 이진화 된 파일(binary file)의 읽고 쓰기 •

MATLAB Programming

Quiz Sol.

55

좌표 저장 코드 좌표 복원 코드