
matlab的importdata无法完全导入txt文件,文件有缺失
这是出了什么问题呢?难道是因为数据量过大吗 展开
推荐于2017-11-26
造成你说的问题的原因需要具体分析。建议你把文件打包传到网盘,我再帮你看看。
多谢朋友,
代码是ex=importdata('test.txt');
test.txt这个文件的地址http://pan.baidu.com/s/1kTA5pKr
1、这个文件的数据格式属于用户自定义的,比较复杂,信息的进一步处理也需要专门编写程序。现有的任何读数据的通用函数都不可能直接读出更细致的信息,而只能将其视为字符串来读取,保存在cell数组中。
2、使用importdata函数读数据文件的优势是,可以自动判断数据分隔符,但由于本文件的数据使用专用格式存储,只能按照字符串读取,上述优势完全不能体现。这种情况下不如使用textscan直接读文件:
fid=fopen('test.txt');
ex=textscan(fid,'%[^\n\r]');
fclose(fid);
需要说明的是,这样读到的数据,所有的空行都被忽略,所以,一共剩下1970行。
当然,也可以使用fgetl或fgets直接读文件,或者使用fread一次性读入文件然后再进行转换。
3、现在来解释一下,为什么这个文件有2081行,却只能读出2019行呢?我对importdata函数的代码进行了分析,可以确认这是一个BUG。
具体的分析不说了,简单把原因介绍一下:这个函数每次读入一行,如果读入的内容不能转换为矩阵数据,则认为该行属于文件头的文字描述内容(HeaderLines)。当这样的行数超过1000行,则认为该文件没有有效数据,则把整个文件都按照字符串来读。
问题就出在这里——当读取超过1000行时,函数再次调用textscan把余下的内容全部读出,计算一共有多少行,然后根据计算的行数来读文件;但问题是,直接用textscan读数据会忽略空行,从1001行开始到文件结束,一共有1019行(而前面的1000行是逐行读入,包含空行),所以,它会认为文件一共有2019行,这也就是2019这个数的由来。
希望对您有帮助。