textscan:瞬时记忆误差当访问非常大的文件(只有最新的Matlab版本)
2视图(30天)
显示旧的评论
我使用一个非常大的数据集(500 gb)分成一千多个单个. txt文件(160列/特点/文件,可能超过一百万行,包含一个字符串和数值型变量)的混合物,每个覆盖一个特定的地理区域。文件覆盖大面积、单一可能多达16 gb . txt文件。处理大量的数据,我的每个文件如下:
- 访问各自. txt文件(“fopen”)
- 在一个while循环进口250000行用“textscan”
- 处理数据和出口规模较小的数据集(如果不是第一个循环迭代添加)
- 重复以上步骤,直到年底达到. txt文件(尽管~ feof)
进口数据的代码是这样的:
文件标识= fopen(文件名);%确定文件名,“文件名”是当前. txt文件的路径
而~ feof(文件标识)%进口成堆的250000行到当前. txt文件
%进口数据,“格式varlist”标识格式和列
%的进口。分隔符“|”。
Data = textscan(文件标识,strcat (char (format_varlist),“\ r \ n”250000年),“分隔符”,“|”,…
“HeaderLines”、双(first_iteration = = 1),“EndOfLine”,“\ r \ n”,“EmptyValue”1);
结束
这样做让我有效地减少我的数据集的大小,这样我以后可以方便地使用完整的数据集。
我的问题是这样的:对所有文件的代码运行得非常好(包括非常大. txt的)版本2019。2021版本(如果我没记错的话,它没有使用2020 a),直到代码达到代码运行得非常好一个文件太大。在这一点上,代码(瞬间)与一个“内存溢出”错误停止:
出的内存。
相关的文档
我怀疑新的“textscan”功能识别访问的文件大小太大加载完全(它),但不承认,我只要250 k线。
我看了看“readtable”命令,但据我所知,这个命令不允许进口小栈的数据一次一次(仅为电子表格)。
有解决方法/解决我的问题吗?当我工作(工作)frequenty与这些类型的代码,我将永远坚持2019年的版本。提前谢谢你的帮助。
3评论
接受的答案
沃尔特·罗伯森
2021年5月12日
指定的编码fopen(),这样的i / o库没有通读整个文件ddetermine编码。现在默认是自动检测,但可以要求读取整个文件证明文件可能包含utf8的假设。
6个评论
更多的答案(2)
湿婆Kalyan Diwakaruni
2021年5月12日
你好,
指内存使用信息位于以下网址:
具体的部分:
1。策略有效地使用内存
2。解决“内存溢出”错误
概念:
1。内存分配
2。内存管理函数
一些额外的资源来解决“内存溢出”错误:
希望它可以帮助。