避免在“ textscan”中的大表格中为每个列键入转换说明符
题
我正在从表中读取数据 textscan()
. 。该表有90列,我想将每个列的值读为浮点数。查看文档,我必须使用说明符 %f
- 但是看来我需要使用90次,所以我最终得到了:
c = textscan(fid,'%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f
%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f
%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f
%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f');
哪个基本上是有效的,但是我想知道是否有一些方法可以避免为我的表中的每一列键入说明符。
解决方案
利用 repmat
根据列数构建格式字符串。
nCols = 60;
format = repmat('%f', [1 nCols]);
c = textscan(fid, format);
如果您将几个字符串列混合在一起,则可以使用这一点。
nNumberCols = 58;
format = ['%s%s' repmat('%f', [1 nNumberCols])];
c = textscan(fid, format);
其他提示
对于一个非常简单的ASCII文件,该文件由90列的浮点数编号组成,该浮点数由已知的定界符分隔,也许使用MATLAB函数会更简单 dlmread
.
例如,如果您的文件rand.txt是:
0.8147 0.0975 0.1576 0.1419 0.6557
0.9058 0.2785 0.9706 0.4218 0.0357
0.1270 0.5469 0.9572 0.9157 0.8491
0.9134 0.9575 0.4854 0.7922 0.9340
0.6324 0.9649 0.8003 0.9595 0.6787
您可以使用: randmat=dlmread('rand.txt');
您只能使用一个“%f”进行文本扫描,然后根据需要重塑它或根据需要将其转换为单元格:
fid=fopen('bla.txt','r');
M=textscan(fid,'%f')
M=reshape(M{1},[],5)
M=num2cell(M,1)
fclose(fid);
我建议使用:
fileId=fopen('fileloc.txt');
formatSpec='%f';
N=90;
data=textscan(fileId,formatSpec,N);
不隶属于 StackOverflow