【发布时间】:2016-01-27 23:55:25
【问题描述】:
我在text file 的四列中有四个复数流
我必须以相同的格式将它们读入 MATLAB 矩阵。
我尝试了以下方法,但它不起作用
fid = fopen('~/<path-to-file>/<fileName>.txt','r');
out = textscan(fid, '(%f,%f) \b\t(%f,%f) \b\t(%f,%f) \b\t(%f,%f) \n','CollectOutput',1);
tapWeights = [out{1} + 1i*out{2} out{3} + 1i*out{4} out{5} + 1i*out{6} out{7} + 1i*out{8}];
fclose(fid);
请注意,textscan 的帮助选项将\b\t 列为空白分隔符。
以下是我得到的输出,
>> out
out =
[1x8 double]
>> out{1}
ans =
1 0 NaN NaN NaN NaN NaN NaN
我在这里错过了什么?
【问题讨论】:
-
试试
dlmread- 你可以设置你想使用的分隔符。 -
您甚至不需要在格式字符串中指定空格——
textscan(fid, '(%f,%f) (%f,%f) (%f,%f) ')就足够了。您也可以考虑使用'CollectOutput'选项。 -
感谢您的指出。额外的 (%f,%f) 是一个错字,但这不是问题。您能详细说明“收集输出”吗?工作代码的完整答案将非常有帮助。
-
FWIW,我尝试了@horchler 的解决方案,如果输入文本文件的格式与指定的格式完全相同,它就可以工作。它在问题中的输入方式,所有数字都在一行中,这与您的描述不同。也许这就是它不起作用的原因?
-
@AndrasDeak:我不确定你在说什么。该文件中唯一的内容是双精度数,然后在将它们加载到 Matlab 中后将它们组合成复数值。如果您指的是
textscan之后的行,那似乎是有效的 Matlab 代码,但为了清楚起见,我会删除+周围的空格。