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.