在Matlab中读取和处理大型文本文件

tri*_*can 4 io matlab file

我正在尝试将大文本文件(几百万行)读入Matlab.最初我使用的是importdata(file_name),这似乎是一个简洁的解决方案.但是我需要使用Matlab 7(是的,我知道它的旧版本),似乎不支持importdata.因此我尝试了以下方法:

while ~feof(fid)    
    fline = fgetl(fid);
    fdata{1,lno} =  fline ;
    lno = lno + 1;
end
Run Code Online (Sandbox Code Playgroud)

但这真的很慢.我猜它是因为它在每次迭代时调整数组大小.有没有更好的方法来做到这一点.请记住,输入数据的前20行是字符串类型数据,其余数据是3到6列十六进制值.

dyn*_*ous 5

你将不得不做一些重塑,但另一个选择是你可以使用fread.但正如所提到的,这基本上将您锁定为矩形导入.所以另一个选择是使用textscan.正如我在另一篇文章中提到的那样,我不是百分之百确定实施的时候,我所知道的是你没有"importdata()"

fid = fopen('textfile.txt')
Out  = textscan(fid,'%s','delimiter',sprintf('\n'));
fclose(fid)
Run Code Online (Sandbox Code Playgroud)

通过使用文本扫描,您将能够获得每行的单元格数组,然后您可以根据需要进行操作.正如我在评论中所说的那样,线条长度是否相同并不重要.现在,您可以更快地解析单元阵列.但正如gnovice所提到的,他也确实有一个非常优雅的解决方案,你可能不得不关注内存需求.

如果你能避免它,你永远不想在matlab中使用的一件事就是循环结构.它们在C/C++等方面速度很快,但在matlab中,它们是获取目标的最慢方式.

编辑:只是查了一下,看起来文本可以在版本7(R14)中实现字面意思,所以如果这就是你所拥有的,你应该很好用.