9

我正在使用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');

这基本上有效,但我想知道是否有某种方法可以避免为我表中的每一列输入说明符。

4

4 回答 4

12

用于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);
于 2012-01-10T16:17:31.893 回答
3

对于一个由 90 列由已知分隔符分隔的浮点数组成的非常简单的 ASCII 文件,使用 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');

于 2012-01-10T15:27:32.570 回答
2

您可以只使用一个“%f”进行文本扫描,然后根据需要对其进行整形或根据需要将其转换为单元格:

fid=fopen('bla.txt','r');
M=textscan(fid,'%f')
M=reshape(M{1},[],5)
M=num2cell(M,1)
fclose(fid);
于 2012-01-10T16:12:12.930 回答
1

我建议使用:

fileId=fopen('fileloc.txt');
formatSpec='%f';
N=90;
data=textscan(fileId,formatSpec,N);
于 2014-10-20T09:46:28.013 回答