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