我的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
答案 0 :(得分:2)
我猜你正在使用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()
将行内容拆分为字段。