2012年2月17日 星期五

MATLAB讀檔

使用MATLAB來讀寫檔案,可分以下幾種功能-

首先, 要先用fp=fopen( '檔名')將檔案開啟
之後就可以用fp指到目前檔案所讀到的地方
fclose(fp)則是關閉檔案

1.純粹給MATLAB自己用
   那就存成MAT檔就好
 用save和load 就可輕鬆恢復原資料格式
  
2.一般二進位檔或文字檔
    讀二進位檔: fread  可讀成任意格式進來
    讀文字檔: fgetl  一次讀一行
    格式化讀檔: fscanf
    格式化讀文字檔: textscan

以下舉例, 讀 's8.kiss2'


(左邊灰色底的數字代表行數,不是原文字檔內容)
先fp=fopen('s8.kiss2')開啟檔案
若我們用fread(fp) 會讀進
ans =
    10
    46
   105
    32
    52
    32
.....
分別代表原字元的 ascii碼
10='\n'  46='.'  105='i'   32=' ' 52='4' ....

若用fread(fp,'*char')則會把內容以char讀出來 ('*char'代表一堆字元)
ans =

.
i

4
...
 若用fread(fp,'bit4=>int8') 則代表把讀進的每四個位元轉成一個8位元整數
所以,基本上fread是比較不管妳文字黨內容為何,這也是為何說它適合讀二進位檔


fgetl則是一行一行讀進來, 再解讀進來的每一行字串
如:
>>s=fgetl(fp); '第一行空白就不解讀了
>>s=fgetl(fp)
s =
.i 4
>> sscanf(s,'.%c %d')
ans =
   105
     4
就讀到i的ascii碼(105)和數字4
fscanf和sscanf類似,只是前者讀檔案,後者讀字串

至於textscan就更厲害了,可以整個文字檔直接讀
像s8.kiss2這個例子,我們想把表頭及後面的內容分別讀出來
1.讀表頭
>> fp = fopen('s8.kiss2');
>> c=textscan(fp,'.%c %d\n')
c =
    [4x1 char]    [4x1 int32]
>> c{1}
ans =
i
o
p
s
>> c{2}
ans =
           4
           1
          20
           5
2.讀內容
>> fp = fopen('s8.kiss2');
>> c=textscan(fp,'%s %s %s %s')
c =
    {24x1 cell}    {24x1 cell}    {24x1 cell}    {24x1 cell}

可以去看一下 c{1}, c{2}, c{3}, c{4}
當然前四個是表頭的部分,只有後面20個是我們要的!

沒有留言:

張貼留言