Matlab dataimport

时间:2017-12-20 08:05:22

标签: matlab octave

我的dataimport的matlab代码给了我不同的结果,看起来像是类似的文本文件作为输入。 Input1给了一个普通的单元格,其中包含文本文件中的所有行作为单元格中的条目,我可以使用{i}引用它。 Input2给我一个标量数据结构,其中我的文本文件中的所有数字条目都转换为input.data结构。我希望所有文件都转换为常规单元格条目,我不明白为什么有些文件会转换为标量数据结构。

代码:input = importdata(strcat(direct,' \',filename));

输入1示例:Correctly working dataimport, with text file on the right 文件链接:https://drive.google.com/open?id=1aHK4xivqEqJEmaA8Dv8Y0uW5giG-Bbip

输入2示例:Incorrectly working data import, with text file on the right文字链接:https://drive.google.com/open?id=1nzUj_wR1bNXFcGaSLGva6uVsxrk-R5vA

2 个答案:

答案 0 :(得分:2)

UTSL!

我猜你正在使用GNU Octave,尽管你正在编写" Matlab"作为你问题的主题。

在第178行的importdata.m中,代码尝试自动检测数据的分隔符:

delim = regexpi (row, '[-+\d.e*ij ]+([^-+\de.ij])[-+\de*.ij ]','tokens', 'once');

如果针对W40A0060;运行此操作,则会将A作为分隔符,因为它之前和之后基本上都有一个数字。

如果针对W39E0016;运行此操作,则会将{}作为分隔符(空),因为E可能是科学记数法中数字的一部分,因此被排除在外。

<强>解决方案:

你真的应该为importdata调用添加正确的分隔符,而不要相信它被神奇地检测到。

如果您只想要单元格中的行,请使用

strsplit (fileread ("W39E0016_Input2.txt"), "\n")

答案 1 :(得分:0)

分析

这看起来确实很奇怪!

编辑: @Andy已经破解了这种看似奇怪的行为的原因(见他的解决方案)。

当您使用importdata()函数的所有输出时,您可以看到读取数据时会发生什么:

[dat1,del1,headerrows1]=importdata('Input1.txt')
[dat2,del2,headerrows2]=importdata('Input2.txt')

对于您的第一个文件,它识别69个标题riws并且没有分隔符:

del1 = []
headerrows1 =  69

在第二个文件中只识别两个标题行和一个逗号,分隔符

del2 = ','
headerrows2 =  2

我在文件中找不到明显的原因导致对数据的这种不同解释。

建议

您的数据格式相当复杂。它不是像excel一样生成的简单表格。它有多行,每行具有不同数量的字段和不同的数据类型。 importdata()不适用于此类数据。我建议为这种文件编写一个特定的导入函数。首先看textread()进行猜测。您可以使用它以文本的形式读取文件的行,然后使用sscanf()进行解释,或使用strsplit()将行内容拆分为字段。

相关问题