在MATLAB中使用fscanf读取未知数量的列

时间:2015-12-16 14:18:57

标签: matlab scanf

我想使用fscanf来读取包含4行且列数未知的文本文件。换行符由两个连续的空格表示。

有人建议我将:作为sizeA参数传递,但它不起作用。

如何阅读我的数据?

更新:文件格式为

String1 String2 String3
10 20 30
a b c
1 2 3

我必须填充4个数组,每行一个。

3 个答案:

答案 0 :(得分:0)

看看这是否适用于您的应用程序。

fid1=fopen('test.txt');
i=1;
check=0;
while check~=1
    str=fscanf(fid1,'%s',1);
    if strcmp(str,'')~=1;
     string(i)={str};
    end
    i=i+1;
    check=strcmp(str,'');
end
fclose(fid1);
X=reshape(string,[],4);
ar1=X(:,1)
ar2=X(:,2)
ar3=X(:,3)
ar4=X(:,4)

一旦你拥有' ar1'' ar2',' ar3',' ar4'你可以随意解析它们。

答案 1 :(得分:0)

我找到了一个解决方案,我不知道它是否是唯一的解决方案,但它运行良好:

LineRenderer

答案 2 :(得分:0)

您可以使用

rawText = getl(fid);
lines = regexp(thisLine,'  ','split);
tokens = {};
for ix = 1:numel(lines)
    tokens{end+1} = regexp(lines{ix},' ','split'};
end

这将为您提供cell array具有行和列形状或原始数据的字符串。 要读取任意一行文本,请根据您提供的格式化信息将其分解。我的例子使用了一个空格字符。

这使用正则表达式来定义分隔符。正则表达式强大但过于复杂,无法在此描述。请参阅regexpregular expressions的MATLAB帮助。