平均日期导入

Matlab dataimport

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

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

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

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

分析

这看起来确实很奇怪!

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

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

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

对于您的第一个文件,它识别 69 header 个字符并且没​​有分隔符:

del1 = []
headerrows1 =  69

而在您的第二个文件中,只有两行 header 行和一个逗号 , 分隔符被识别

del2 = ','
headerrows2 =  2

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

建议

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

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")