我的dataimport的matlab代码给了我不同的结果,看起来像是类似的文本文件作为输入。 Input1给了一个普通的单元格,其中包含文本文件中的所有行作为单元格中的条目,我可以使用{i}引用它。 Input2给我一个标量数据结构,其中我的文本文件中的所有数字条目都转换为input.data结构。我希望所有文件都转换为常规单元格条目,我不明白为什么有些文件会将它们转换为标量数据结构。
代码:input = importdata(strcat(direct,'\',filename));
Input1示例:Correctly working dataimport, with text file on the right文件链接:https://drive.google.com/open?id=1aHK4xivqEqJEmaA8Dv8Y0uW5giG-Bbip
Input2示例:Incorrectly working data import, with text file on the right文件链接:https://drive.google.com/open?id=1nzUj_wR1bNXFcGaSLGva6uVsxrk-R5vA
这看起来确实很奇怪!
编辑:这种奇怪的行为的原因已被@Andy破译(见他的解决方案)。
当您使用importdata()
函数的所有输出时,您可以看到读取数据时会发生什么:
[dat1,del1,headerrows1]=importdata('Input1.txt')
[dat2,del2,headerrows2]=importdata('Input2.txt')
对于您的第一个文件,它识别69个标题行,没有分隔符:
del1 = []
headerrows1 = 69
在第二个文件中,只识别两个标题行和一个逗号,
分隔符
del2 = ','
headerrows2 = 2
我在文件中找不到明显的原因导致对数据的这种不同解释。
您的数据格式相当复杂。它不是像excel一样生成的简单表格。它有多行,每行具有不同数量的字段和不同的数据类型。 importdata()
不是为此类数据而设计的。我建议为这种文件编写一个特定的导入函数。看看textread()
的第一个猜测。您可以使用它来读取文件的行作为文本,然后使用sscanf()
解释它或使用strsplit()
将行内容拆分为字段。
我猜您正在使用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")