cell存儲的内容與資料類型無關,對于大量的不規則資料(不僅僅指的"數")的操作很友善。 1、由txt讀入 經常遇到txt内儲存的資料類型不統一,格式各異,這時候按cell讀入資料就比較友善。
- fid = fopen(filename, 'r');
- p = textscan(fid, '%s');
其中filename是txt檔案的名稱,該操作将txt内的資料按字元串方式讀入變量p内。 假設txt記憶體放内容如下:
- name age native
- Jim 23 U.S.
- Li 25 P.R.C
- Lucy 21 U.K.
則調用上述程式得到的p的
- p =
- cell
- {12×1 cell}
既p是隻有一個元素的cell,但是這個cell是一個12x1的列向量。 2、資料格式整理 通過“變量名+{index}”的方式可以通路第index個cell的内容,如下所示。
- >> p{1}
- ans =
- 12×1 cell array
- 'name'
- 'age'
- 'native'
- 'Jim'
- '23'
- 'U.S.'
- 'Li'
- '25'
- 'P.R.C'
- 'Lucy'
- '21'
- 'U.K.'
利用reshape函數整理資料
- % 根據中繼資料格式,整理為4行3列的矩陣
- mat_p = reshape(p{1}, 3, 4)';
整理後的資料格式如圖所示:
- mat_p =
- 4×3 cell array
- 'name' 'age' 'native'
- 'Jim' '23' 'U.S.'
- 'Li' '25' 'P.R.C'
- 'Lucy' '21' 'U.K.'
由于reshape是優先對列進行排序,是以如果想要排列一個row行col列的資料,就要先排列為一個col行row列的矩陣後再進行轉置。 3、資料的輸出
- txtname = "D:\example_new.txt";
- pfile = fopen(txtname, 'w');
- for i = 1:4
- for j = 1:3
- fprintf(pfile, '%-5s', mat_p{i, j});
- end
- fprintf(pfile, '\r\n');
- end
- fclose(pfile);
按照上面的程式對資料進行輸出,得到的救過如下圖所示:
- name age native
- Jim 23 U.S.
- Li 25 P.R.C
- Lucy 21 U.K.