从.txt文件一次读取一行数组(Matlab或C)。 “内存不足”使用'A = load()'一次加载整个文件。

时间:2013-06-18 17:56:13

标签: c arrays matlab

我有一个包含1000行和100000列的.txt文件。一个10GB的文本文件,包含我需要分析的模拟结果(实数)。

我的数据格式为:[0.5 0.3 0.45 .. ; 0.4 0.22 0.21587 .. ; 0.1359 1.054 1.1 ... ]
(用空格和线条分隔)

如果我尝试使用A=load('Data.txt')将整个文件加载到矩阵中(在Matlab中),我会收到一条错误消息:“内存不足”,我认为这意味着 - RAM(对吗?)。

我希望一次只能从文件中读取一行到1d数组。我怎么做? 我已经尝试过不同版本的A=load('Data.txt')(1,:)A=load('Data.txt'(1,:))等等。

C代码中的答案也将受到赞赏。谢谢。

3 个答案:

答案 0 :(得分:1)

answer。如果您的文件很大,则不应尝试一次加载。你应该逐行阅读。如果这仍然不起作用,您应该查看csvread函数。

编辑: 此link也非常有用

第二编辑: 试试Matfile io

答案 1 :(得分:0)

如果效率不是太大,可以使用eval语句。

fid = fopen('output.txt');  % Open the file
numRun = 10; % The number of simulations
for ii = 1:numRun
    ln = fgetl(fid);
    eval( sprintf('a=%s;', ln) );

    % Do stuff
end

但是,我认为更好的方法是为每个运行提供自己的特殊文件,然后像正常一样阅读。这样您就不必担心来自eval语句或整体eval开销的ghost变量。

fid = fopen('output.txt');  % Open the file
numRun = 10; % The number of simulations

for ii = 1:numRun
    ofid = fopen(sprintf('output%i.txt', ii), 'w')
    ln = fgetl(fid); % Read the line
    fprintf( ofid, ln );
    fclose( fid );
end

答案 2 :(得分:0)

这应该做你想要的:

fid = fopen('Data.txt');
while~feof(fid)
    line = fgetl(fid);
    C = textscan(line, '%f %f %f', 'Delimiter', ';');
    data = cell2mat(C);
    ... Do you processing below
end

这将逐行处理数据。我还假设您的数据由;字符分隔,并且您知道每行的长度,因此(%f %f %f)。例如,这个:

0.5 0.3 0.45; 0.4 0.22 0.21587; 0.1359 1.054 1.1

将变为:

0.5000    0.3000    0.4500
0.4000    0.2200    0.2159
0.1359    1.0540    1.1000

  

目标是相同的:从数据中一次读取每一行,并 - 计算它的总和。 - user1611107

如果您要查找每行的总和,可以添加以下内容:

lSum = sum(data);