본문 바로가기
매트랩(Matlab)/매트랩 강의

[Matlab / 매트랩] 13. 파일 브라우저를 이용한 데이터 불러오기와 저장하기

by freezkim 2010. 3. 18.

[Matlab / 매트랩] 매트랩 강의 13번째
파일 브라우저(?)를 이용한 데이터 불러오기와 저장하기



이런걸 뭐라고 불러야 될지 몰라서 일단은 파일 브라우저 라고 쓰긴 썼는데 여튼 뭐 적당한 이름이 떠오르는게 없으니 파일 브라우저라고 합시다.

여튼 이번시간에 이런 파일브라우저(...)를 이용해서 저번시간에 했었던 파일 저장하기와 불러오기를 구현해볼 텐데요.
이제 이런걸 슬슬 해보면서 모두다 매트랩 고수의 세계(?)로 발을 담궈 보자구요 ㅎㅎ

저번시간에 했던 내용을 모조리 숙지한 상태라면 이부분은 매우 쉽게 끝이 날것 같네요ㅎ 오랜만에 스크롤 압박이 안 느껴지는 좋은 강의가 될듯 하군요ㅋ

자, 각설하고 위의 창을 띄우기 위한 명령어는 다음과 같습니다.
1. 저장할때 - uiputfile
2. 불러올때 - uigetfile


위의 명령어를 치게 되면 저 위에서 본 그림처럼 똑같은 창이 뜨게 되요.
그리고 어떤 파일을 선택하거나, 저장을 누르게 되면 파일의 경로와 이름이 변수에 저장되는 형태입니다.

일단 한번 볼게요ㅎ
구조는 이렇습니다
[파일이름, 파일 경로] = uiputfile('파일형식','창 제목')

이렇게 한번 쳐볼게요:
[file,path] = uiputfile('*.txt','Save data As')

간단하게 한줄 쳤을 뿐인데 멋진 창이 나타납니다.

일단 파일 이름엔 'test'로 저장을 했습니다.

그 결과 file에는 test.txt 라는 문자가 입력되었고, path에는 파일의 경로가 입력되었네요(이름은 가려주시고 호호)


취소를 눌렀더니 file, path엔 0이라는 숫자가 들어가게 됩니다.


자 이까지 하셨다면 uiputfile, uigetfile을 응용한 저장하기와 불러오기는 이미 다 끝난겁니다ㅎㅎ
파일의 경로, 파일 이름을 알았으니, 그냥 요 데이터와 저번시간에 했던 fprintf, fscanf를 합체!하면 끝입니다.

그럼 두개를 합한 코드 올라갑니다!

[file,path] = uiputfile('*.txt','Save data As');
if (file ~=0)
    fname=sprintf('%s%s',path,file);
    a=fopen(fname,'w');
    fprintf(a,'%d %d %d \n',data' );
    fclose(a);   
else
    return
end



[file,path] = uiputfile('*.txt','Save data As');
-> file,path에서 uiputfile을 이용해 경로를 받아 주었구요.

if (file~=0) 에서 file에 어떤 경로가 들어갔을 때, 파일을 만들게 합니다.

   fname=sprintf('%s%s',path,file);
-> 전체 파일 이름(fname)을 경로+파일이름 순으로 sprintf명령어를 사용하여 나타내었습니다.

   a=fopen(fname,'w');
-> 바로 위에서 지정한 전체파일이름 fname을 이용해서 fopen을 사용했습니다. 요 밑으론 저번강의와 일치해요.

   fprintf(a,'%d %d %d \n',data' );
   fclose(a);   
else
   return
->  취소가 되었을 경우는 함수밖으로 빠져나오게 그냥 return합니다.
      굳이 쓸 필요는 없는데...잉 이거 왜 넣어줬지 저도모르게습관적으로 허허허허허

end

이런식으로 하시면 완벽하게 멋진 save가 구현되는거죠.
요건 그냥 혼자 쓰긴 좀 거시기하고 gui하고 연동해서 쓰기에 안성맞춤입니다.

이런식으로 save 버튼을 구현한 다음에



누르면 창이 띄워지게 되는거죠 호호호

이런식으로 사용한답니다. 그냥 m-file에서 쓰기엔 그렇게 좋은것 같지는 않네요. 아무래도 m-file은 일회성이라...ㅠ

비슷하게 로드는 이런식으로 쓰면 되겠죠

[file,path] = uigetfile('*.txt','load data file');
if (file ~=0)
    fname=sprintf('%s%s',path,file);
    a=fopen(fname,'r');
    data=fscanf(a,'a %g %g %g %g ',[4,inf]);
    data=data';
    fclose(a);   
else
    return
end

이 부분은 아예 코드를 저장해 놓으시고 필요하실때마다 붙여서 쓰시는 것도 괜찮을 것 같아요. 매번 만들때마다 헷갈려서 이건ㅠㅠㅠㅠ


 



다음강의는 흠...일단 gui하나 올리고, 수치해석쪽으로 넘어가면 되지 않을까 싶네요. 미분방정식 푸는 것부터 한번 시작해봐야겠습니다.힛
시험기간이니 빠른업뎃은 지금은 곤란하다. 기다려달라.