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

标签 file matlab io

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

while ~feof(fid)    
    fline = fgetl(fid);
    fdata{1,lno} =  fline ;
    lno = lno + 1;
end

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

最佳答案

你将不得不做一些 reshape ,但你的另一个选择是你可以使用 fread。 但正如所提到的,这实质上将您锁定在矩形导入中。所以另一种选择是使用文本扫描。正如我在另一条注释中提到的,我不是 100% 确定它是何时实现的,我所知道的是你没有“importdata()”

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

通过使用 textscan,您将能够为每一行获取一个字符元胞数组,然后您可以根据需要对其进行操作。正如我在评论中所说,线条是否相同不再重要。现在您可以更快地解析元胞数组。但正如 gnovice 提到的那样,他也确实有一个非常优雅的解决方案,你可能不得不关心内存需求。

如果可以避免的话,您永远不想在 matlab 中使用的一件事是循环结构。它们在 C/C++ 等中速度很快,但在 matlab 中,它们是到达目的地最慢的方式。

编辑:刚刚查了一下,看起来 textscan 是在版本 7 (R14) 中按字面意义实现的,所以如果那是你拥有的,你应该很好地使用它。

关于file - 在 Matlab 中读取和处理大文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5953182/

相关文章:

matlab - 从 Windows DOS 提示符运行 MATLAB 脚本

javascript - 如何使用 node.js 附加到特定位置的文件?

windows - 使用 WMI 查询扩展文件属性

javascript - 将新文件加载到HTML的音频元素中

被调用对象不是使用三元的函数或函数指针

io - Fortran MPI 代码打开具有相同单元号的不同文件

java - 使用 FileSystems.newFileSystem(URI uri, Map<String, ?> env) 时出错

c++ - 将数据传递到字符串时如何保留文件的格式?

matlab - 更改 Matlab 图的图例

Matlab - 直接绘图到 .ps 文件