lec 12. matlab file i/o
TRANSCRIPT
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에서 사용하는 파일 입출력 함수들과 거의 동일
2
MATLAB Programming
>> save 파일명
save 파일명• workspace 상의모든변수를 MATLAB
저장형식으로 “파일명”의이름을갖는
파일에저장
3
MATLAB Programming
>> save 파일명 변수명
save 파일명변수명
• workspace 상에서 “변수명”으로
지정한변수를 MATLAB 저장
형식으로 “파일명”의파일에저장
4
MATLAB Programming
>> save 파일명 변수명 변수명 …
save 파일명변수명변수명 …• workspace 상에서 “변수명”으로
지정된모든변수들을 MATLAB 저장
형식으로 “파일명”의파일에저장
5
MATLAB Programming
>> save 파일명 변수명 옵션
save 파일명변수명옵션• workspace 상에서 “변수명”으로지정한
변수를 “옵션”에서지정한형식으로
“파일명”의파일에저장
• 여기서는, 데이터를 8-digit ASCII 포맷 (즉,
텍스트포맷) 으로저장
6
MATLAB Programming
>> save 파일명 변수명 옵션
M_ascii.txt 파일
더블클릭시
7
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 형식으로 저장
8
MATLAB Programming
>> save 파일명 변수명 옵션
M_ascii.txt 파일
더블클릭시
아래와같이 double 옵션을주어저장한경우
>> save M_ascii.txt M -ascii -double
9
MATLAB Programming
>> save 파일명 변수명 옵션
M_ascii.txt 파일
더블클릭시
아래와같이 tabs 옵션을주어저장한경우
>> save M_ascii.txt M -ascii -tabs
10
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’ ) ASCII 파일로저장하는경우,
변수를여러개동시에저장할수없음
11
MATLAB Programming
복소수의 저장
• 복소수를 ASCII 형식의파일에저장하려고하면, 경고가뜸
• 복소수의허수부는저장되지않음!!
12
MATLAB Programming
복소수의 저장
복소수를 ASCII 형식의파일에저장하려고하면, 복소수의허수부는저장되지않음!!
M_ascii.txt 파일
더블클릭시
복소수의허수부가모두사라짐!!
복소수는반드시 MAT 파일형태로저장하거나,구분자 (delimiter)를사용한텍스트파일로저장해야함
13
MATLAB Programming
Workspace 변수 값 간편하게 저장하기
- Workspace 창에서마우스우측버튼클릭- save 버튼선택하여모든변수들저장- 각변수를클릭하고, 마우스우측버튼
누르면해당변수만저장가능
14
MATLAB Programming
>> load 파일명
load 파일명• “파일명” 이름을갖는파일로부터
데이터를읽어와서 workspace 상의
변수에대입함
15
MATLAB Programming
>> load 파일명
load 파일명• “파일명” 이름을갖는파일로부터
데이터를읽어와서 workspace 상의
변수에대입함
16
MATLAB Programming
>> load 파일명
.mat 파일• 확장자 (.mat)을제외한파일이름
만으로데이터를읽어올수있음
17
MATLAB Programming
>> 변수명 = load(파일명)
변수명 = load(파일명)• 변수명은 struct() 타입으로되어,
파일에저장되어있는각 MATLAB
데이터들은 struct의원소로들어감
18
MATLAB Programming
Current Folder의 파일 더블클릭
myfile.mat 파일
더블클릭시더블클릭만으로데이터를읽어올수있음
19
MATLAB Programming
MAT-file의 저장된 변수명 알아오기
whos(‘-file’, 파일명)
20
MATLAB Programming
일부 변수만 불러오기
load 파일명변수명
• “파일명” 파일로부터 “변수명” 으로
적힌변수들만을 workspace 상으로
읽어옴
21
MATLAB Programming
Quiz
문제 1. 다음은 무작위로 주어진 3차원 공간 상의 점들을 보간 (interpolation)법을
통해 3차원 그래프를 그리는 코드이다.
무작위로 주어진 각 점들의 좌표값과 보간하여 얻어낸 그래프의 좌표 정보를
MAT 파일로 저장하라. (즉, x, y, z, X, Y, Z) 값을 저장
22
MATLAB Programming
Quiz
문제 2. 문제 1에서 3차원 공간상의 점들과, 그래프에 대한 각 좌표값들을 MAT
파일에 저장하였다. 저장한 좌표값들을 MAT 파일로부터 읽어와서 아래 그래프를
복원하려고 한다.
그래프를 복원할 때, 공간상의 점들로부터 보간법으로 그리는 것이 아니라, MAT
파일로부터 읽어온 그래프의 좌표 값을 mesh 함수를 이용하여 그리자.
23
MATLAB Programming
Quiz Sol.
좌표값을 MAT 파일에저장
좌표값을 MAT 파일에서읽어오기
그래프복원
24
MATLAB Programming
외부에서 생성한 데이터 읽어오기
메모장에서데이터
작성및저장한후
MATLAB에서 불러오기
25
MATLAB Programming
CVS 파일 (콤마로 구분된 데이터)로 저장하기
MATLAB 에서 cvswrite
함수를사용하여 CVS
형식으로저장하면, 각
데이터가콤마로구분 26
MATLAB Programming
사용자 지정 구분자로 데이터 저장하기
dlmwrite 함수에서구분자(delimiter)를 ‘|’로주면, 각데이터가 | 로구분
dlmwrite( 파일명, 저장할변수명, ‘delimiter’, 구분자로사용할문자)
27
MATLAB Programming
사용자 지정 구분자 데이터 읽어오기
dlmwrite로저장한텍스트데이터
파일을 load 함수로읽어오게되면모든
데이터를정확하게읽어오지못함
dlmread( 파일명, 구분자로사용한문자)
28
MATLAB Programming
복소수를 텍스트 파일에 저장, 텍스트 파일로부터 읽어오기
각각의복소수가구분자 ‘|’ 로구분됨
29
MATLAB Programming
Excel 데이터 읽어오기
xlsread( 파일명 )
Excel의첫번째 sheet의모든데이터를가져옴
특정셀의데이터가비어있다면,
MATLAB은 NaN으로처리
30
MATLAB Programming
Excel 데이터 읽어오기 (특정 범위 데이터 읽어오기)
xlsread( 파일명, 읽어올영역 )
Excel의첫번째 sheet의 B2:C4 영역의데이터를가져옴
31
MATLAB Programming
Excel 데이터 읽어오기 (특정 sheet 데이터 읽어오기)
xlsread( 파일명, 읽어올시트 )
Excel의 sheet 3의모든데이터를가져옴
32
MATLAB Programming
MATLAB 변수를 Excel에 저장하기
xlswrite( 파일명, 저장할변수명, Excel Sheet 이름)
• sheet 이름생략하면 Sheet1에저장됨
33
MATLAB Programming
MATLAB 변수를 Excel 특정 영역에 저장하기
xlswrite( 파일명, 저장할변수명, Excel Sheet, 영역)
• sheet 이름생략하면 Sheet1에저장됨
34
MATLAB Programming
MATLAB 변수를 Excel 특정 영역에 저장하기
새로운데이터를기존엑셀파일에서데이터가존재하는부분에덮어씀
35
MATLAB Programming
uiimport : 파일에서 데이터 가져오기
• 프롬프트에서 >> uiimport라고입력
• 데이터를파일에서읽어올지, 클립보드에서읽어올지선택
• 여기서는 dlm_test.txt 파일을읽어옵시다.
36
MATLAB Programming
uiimport : 파일에서 데이터 가져오기
dlm_test.txt 파일을읽어옴
• 1. 각행에있는데이터들이모두하나로붙어있음
• 2. 데이터를잘잘라주기위해 delimiter를선택
37
MATLAB Programming
uiimport : 파일에서 데이터 가져오기
• 1. 각행에있는데이터들이모두하나로붙어있음
38
MATLAB Programming
uiimport : 파일에서 데이터 가져오기
import할모든데이터선택후버튼클릭
39
MATLAB Programming
uiimport : 클립보드에서 데이터 가져오기
1. 텍스트 파일 또는 엑셀 파일에서 데이터 선택하고, Ctrl+C 또는
“복사하기” 누름
• 20x20_magic_matrix.txt 파일을 열어, 전체를 선택하고 ctrl+c 하여 복사
40
MATLAB Programming
uiimport : 클립보드에서 데이터 가져오기
2. 프롬프트에서 >> uiimport 입력하고, clipboard 버튼 선택
41
MATLAB Programming
uiimport : 클립보드에서 데이터 가져오기
3. 클립 보드에 들어있는 데이터를 읽음
42
MATLAB Programming
파일 입출력을 위한 Dialog Box
uigetfile : 파일을 가져오기 위한 dialog box
43
MATLAB Programming
파일 입출력을 위한 Dialog Box
uiputfile : 파일을 저장하기 위한 dialog box
44
MATLAB Programming
Low Level File I/O
지금까지 학습한 파일 입출력 방법은 데이터의 크기 등이 균일해야 함
서로 다른 데이터 타입, 서로 다른 크기의 데이터가 혼재되어 있는
파일을 읽고 쓰기 위해서는 저수준 파일 입출력 함수들을 이용해야 함
파일 열기
• fid = fopen( 파일명, 모드)
– fid는 파일 식별자 (file identifier)
파일 닫기
• st = fclose( fid )
– 파일 닫기 성공시 0 리턴
– 파일 닫기 실패시 1 리턴
모드 모드에따른파일입출력작동
r 읽기전용으로파일을연다
r+ 읽기, 쓰기겸용으로파일을연다.
w
주어진파일명을갖는새로운파일을만든다. 주어진파일명과동일한파일이있으면, 파일을지우고새롭게파일을만든다. 만들어진파일을쓰기위해서연다.
w+
주어진파일명을갖는새로운파일을만든다. 주어진파일명과동일한파일이있으면, 지우고새롭게파일을만든다. 만들어진파일을읽고쓰기위해서연다.
a새로운파일을만들고연다. 같은이름의파일이존재하면쓰기위해서파일을연다. 데이터를쓰면, 그데이터는파일의끝에덧붙는다.
a+새로운파일을만들고연다. 같은이름의파일이존재하면읽고, 쓰기위해서파일을연다. 데이터를쓰면, 그데이터는파일의끝에덧붙는다.
45
MATLAB Programming
Low Level File I/O
fprintf 함수
• count = fprintf( fid, format, A, … )
– 파일 식별자 fid를 갖는 파일에 A와 그 뒤에 입력되는 변수들의 값을 forma에
맞추어서 쓴다.
– 쓰여진 데이터의 bytes 수를 count 변수에 반환한다.
– fid 생략하면 화면에 출력
생성된 fprintf_test.txt 파일
46
MATLAB Programming
Low Level File I/O
fprintf 함수
• format의 의미
%-12.5f
Format의 시작을의미
Flag
Field width
Precision
Conversion Specifier
ConversionSpecifier 의미
%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
47
MATLAB Programming
Low Level File I/O
48
MATLAB Programming
Low Level File I/O
fscanf 함수 : 데이터를 지정한 format에 맞게 읽어 들이는 함수
• A = fscanf( fid, format, size )
– 파일 식별자 fid를 갖는 파일로부터 format에 지정된 형식으로 데이터를 size 개수
만큼 읽어 들임
– 읽어 들인 데이터는 열 벡터의 형태로 반환하여 A 변수에 저장
읽어들이고자하는 fscanf_test.txt
49
MATLAB Programming
Low Level File I/O
fscanf 함수
• A = fscanf( fid, format, size )
– size 가 [M N]으로 설정되면, M x N 크기를 갖는 행렬의 형태로 읽어 들임
– size가 inf가 되면, 주어진 파일의 끝까지 읽어 들임
읽어들이고자하는 fscanf_mat_test.txt
50
MATLAB Programming
Quiz
아래와 같이 다양한 형식의 정보가 혼합된 데이터를 파일로부터읽어 와서, 구조체 배열에 저장해 봅시다.
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)
51
MATLAB Programming
Quiz Sol.
52
MATLAB Programming
Quiz
아래 그래프를 그리기 위해 다음과 같이 X, Y, Z 값을 계산하면 된다.
X, Y, Z 값은 각각 21 x 21 크기의 행렬로 구성되어 있다. X, Y, Z 행렬(좌표값)을 surf_plot.txt
파일에 저장했다가, surf_plot.txt 파일에 저장된 데이터 값 (좌표값)을 읽어서 동일한
그래프를 그려보자.
>> t = 0:pi/10:2*pi;>> [X,Y,Z] = cylinder(1+cos(t).*sin(2*t));>> surf( X, Y, Z);
파일에좌표값저장
좌표복원
좌표저장
53
MATLAB Programming
Quiz Sol.
좌표저장코드 좌표복원코드
54