0

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

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

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

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

C代码代码中的答案也将不胜感激。谢谢你。

4

3 回答 3

1

看到这个答案。如果您的文件那么大,则不应尝试一次全部加载。你应该逐行阅读。如果这仍然不起作用,您应该查看csvread函数。

编辑:这个链接也很有帮助

第二次编辑:尝试Matfile io

于 2013-06-18T18:13:46.573 回答
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

目标是相同的:一次从数据中读取每一行,然后 - 计算它的总和。–用户 1611107

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

lSum = sum(data);
于 2013-06-18T20:29:01.783 回答
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 开销。

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
于 2013-06-18T18:16:54.100 回答