【问题标题】:Matlab, textscan: precise row pickingMatlab,textscan:精确的行拾取
【发布时间】:2014-06-12 20:17:04
【问题描述】:

Matlab 和 textscan 问题,很遗憾。 就我而言,我可以使用以下方法导入我感兴趣的数据:

f = fopen(file,'r');  % Open text file
data=textscan(f, '%f %f %f %f %f %f %f %f', 'Delimiter',',', 'HeaderLines',14);
fclose(f);

但是

在表头的第 12 行和第 13 行我有一些有趣的数据,结构如下:

Calibration Coefficient,0.002501,0.001,0.1294,35.5,200,66.666,1
Offset,0.9,0,0,0,0.7,0,0

所以它们是第一列中的字符串,然后是 7 个双精度数,应该以这种方式编码(?)

param1=textscan(f, '%*s %f %f %f %f %f %f %f','Delimiter',',','HeaderLines',11);
param2=textscan(f, '%*s %f %f %f %f %f %f %f','Delimiter',',','HeaderLines',12);

实际上我想知道为什么参数单元格是空的,是否可以只导入我文件的第 12 行和第 13 行中的数据。

提前致谢。

【问题讨论】:

  • textscan 函数有一个 'count' 参数,您应该在第一行使用它:打开文件,以正确的格式读取第 12 行,指定 count=1 和 header line=11,然后使用 count=1 读取第 13 行,没有标题行(如果两行具有相同的格式,您可以使用 count=2 一次性读取它们)。然后读取文件的其余部分(未指定的“计数”将读取到文件末尾),然后关闭文件。
  • 谢谢,帮助不清楚这个计数。但是输出单元格是空的。不知道为什么。

标签: matlab textscan


【解决方案1】:

看起来你的一切都刚刚好。这是一个小改动,应该可以解决您的需求(希望如此)

param1=textscan(f, '%s %f %f %f %f %f %f %f',1,'Delimiter',',','HeaderLines',11);
param2=textscan(f, '%s %f %f %f %f %f %f %f',1,'Delimiter',',','HeaderLines',12);

注意在分隔符之前插入了“1”。我很确定这意味着在停止之前只需阅读一组 '%s %f %f %f %f %f %f %f'。这样,您只需要读取第 12 行和第 13 行并将它们分别保存到 param1 和 param2。我也没有得到任何空单元格。

希望这会有所帮助!

【讨论】:

  • 感谢它非常有帮助,也有助于进一步使用 textscan。但是,输出单元格 (param1,2) 为空。谁知道为什么。担心我的细胞有问题。
  • 嗯...您如何访问 param1 的值?如果您在 cmd 窗口中使用 param1{2} 等大括号,结果是否仍为空?
  • 我发现参数文件是空的,因为我在标题行上打错了。该文件为 3 打开一次,但标题行用于每个命令打开一次的文件。我检查了这些东西并更改了我能够选择正确行的标题,再次感谢。
最近更新 更多