在Matlab中将许多文本文件转换为单元格数组

时间:2019-01-03 21:27:14

标签: matlab text-files cell-array

我在一个文件夹中有812个文本文件,在另一个文件夹中有649个文本文件(这些文本文件是图像描述符),每个文本文件都包含大约3000个具有这种模式的数字:前5个数字是描述符的位置,下一个128个数字是我想将它们另存为单元格数组中的列的值,并且此模式重复进行到文本文件的末尾。我的目标是提取128 * n个单元格数组中的所有描述符,其中n是所有图像的描述符数量。这是我的代码,用于提取一个单元格数组中所有文本文件的所有描述符

function cel = affinedesc(fname)


FID = fopen(fname, 'r');
content = textscan(FID, '%s');
content = content{1,1};
cel = cell(1,str2num(content{2,1}));
content = content(3:end);
  fclose(FID);

counter = 1;
for i=1:133:length(content)-1
t1 = i+5;
t2 = i+4+128;
cel{counter} = content(t1:t2);
counter = counter+1;


end

cel = cat(2,cel{:});
end

function descscel = affinedescs(dir) 

desccel = {};
for i=1:length(dir)
fname = dir(i).name;
cel = affinedesc(fname);
desccel{i} = cel;
end
descscel = cat(2,desccel{:});%here my pc freezes!

end

现在这是我的问题:它可以正常工作,但最终单元格未出现在matlab工作区中,并且我无法保存所有文本文件的最终单元格,因为它是所有文本文件的所有单元格的串联, PC屏幕冻结。我想是因为我的最终单元格数组太大,我想知道是否有更好的方法?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可以验证计算机内存是否用完了吗? (例如,通过Windows中的任务管理器。)

如果这是内存问题,请尝试避免在循环内动态增长阵列/单元。通过定义正确大小的空变量来预分配内存。 单元阵列不需要连续的内存,但是每个单元都需要。 Read more here

此外,该行中有一个错字,使您的计算机死机。 descel变量是否在其他地方创建?

我知道这可能不适合作为答案,但是我没有足够的声誉来发表评论。