我是MATLAB编程的新手,一些语法让我感到厌烦。所以我需要一些帮助。另外,我需要一些复杂的循环思路。
以下是我的内容细分:
.dat
个文件,每个文件的标题都是output_1_x.dat
,output_2_x.dat
等。.dat
文件大约是。 3.9 GB 以下是我需要做的事情:
output_final.dat
含义是什么:
fread
分成块或数据包,一次可能100 MB(使用嵌入式循环?)output_final.dat
,下一个文件自动读取&写(主循环)。 嗯,这就是它。我搜索了“合并多个文件”并找到了this。这不是我需要做的......我不需要从文件中获取文件或数据,并将其写入新文件。我只是...连接...?这在Java或Perl中很简单,但我只使用MATLAB作为工具。
注意:我在一个非常强大的盒子上运行OpenSUSE中的KDE。也许某个同时也是终端专家的人知道从内核执行此操作的命令/脚本?
答案 0 :(得分:1)
所以在这个网站上我们通常会指向whathaveyoutried.com,但这个问题很好。
我不会写代码,但我会告诉你我会怎么做。所以首先我对你为什么需要fread
文件感到有点困惑。你只是将一个文件附加到另一个文件的末尾吗?
您实际上可以使用unix命令来实现您的目标:
files = dir('*.dat');
for i = 1:length(files)
string = sprintf('cat %s >> output_final.dat.temp', files(i).name);
unix(string);
end
该代码应循环遍历所有文件并将所有内容传递到output_final.dat.temp
(然后重命名,我们不希望它包含在任何内容中);
但是如果你真的想使用fread
,因为你想以某种方式解析这些行,那么你可以使用相同的过程:
files = dir('*.dat');
fidF = fopen('output_final.dat', 'w');
for i = 1:length(files)
fid = fopen(files(i).name);
while(~feof(fid))
string = fgetl(fid) %You may choose to parse the string in some manner here
fprintf(fidF, '%s', string)
end
end
请记住,如果你没有解析这些行,这将需要更长的时间。
希望这会有所帮助。
答案 1 :(得分:1)
我建议在两个文件中使用matlab.io.matfileclass个对象:
matObj1 = matfile('datafile1.mat')
matObj2 = matfile('datafile2.mat')
这不会将任何数据加载到内存中。然后,您可以使用对象的方法将变量从一个文件顺序保存到另一个文件。
matObj1.varName = matObj2.varName
您可以使用fieldnames(mathObj1)
将所有变量放在一个文件中,然后循环将内容从一个文件复制到另一个文件。然后,您可以通过删除复制的字段来清除一些空间。或者您可以通过直接移动数据来使用更危险的程序:
matObj1.varName = rmfield(matObj2,'varName')
只是免责声明:没有尝试过,请自担风险使用。