matlab的importdata无法完全导入txt文件,文件有缺失

我在matlab中读取一个大约2080行文字与数据混合的txt文件,在matlab中打开该文件显示行数为2081行,但是使用importdata后获得的cell数组只有2... 我在matlab中读取一个大约2080行文字与数据混合的txt文件,在matlab中打开该文件显示行数为2081行,但是使用importdata后获得的cell数组只有2019行,获取的信息量比较大,有些数据有上百个数字与字符。

这是出了什么问题呢?难道是因为数据量过大吗
展开
 我来答
匿名用户
推荐于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行。

 

当然,也可以使用fgetlfgets直接读文件,或者使用fread一次性读入文件然后再进行转换。

 

3、现在来解释一下,为什么这个文件有2081行,却只能读出2019行呢?我对importdata函数的代码进行了分析,可以确认这是一个BUG。

 

具体的分析不说了,简单把原因介绍一下:这个函数每次读入一行,如果读入的内容不能转换为矩阵数据,则认为该行属于文件头的文字描述内容(HeaderLines)。当这样的行数超过1000行,则认为该文件没有有效数据,则把整个文件都按照字符串来读。

 

问题就出在这里——当读取超过1000行时,函数再次调用textscan把余下的内容全部读出,计算一共有多少行,然后根据计算的行数来读文件;但问题是,直接用textscan读数据会忽略空行,从1001行开始到文件结束,一共有1019行(而前面的1000行是逐行读入,包含空行),所以,它会认为文件一共有2019行,这也就是2019这个数的由来。

 

希望对您有帮助。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式