MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   MATLAB论坛 (https://www.labfans.com/bbs/forumdisplay.php?f=6)
-   -   [讨论]如何将多个文件合并? (https://www.labfans.com/bbs/showthread.php?t=2069)

afen 2008-04-04 23:22

[讨论]如何将多个文件合并?
 
[SIZE=3][SIZE=4]各位高手,小弟碰到一个问题总是解决不了,请大家帮忙。
现在有myfile001.dat,myfile002.dat,...,myfile100.dat一共100个文件,每个文件中的数据都是1行的,个数相等,我想将它们合并成一个数据文件,不知道怎么办?
先谢谢了。[/SIZE][/SIZE]

dnping 2008-04-05 08:14

可以用软件打开,然后复制粘贴即可;
如果用matlab打开的话,先打开文件,然后再合并,最后储存到新的文件中去,具体命令请楼主自己网上查一下。

afen 2008-04-05 22:35

用软件打开,复制粘贴不太可行,因为文件太多了。
第二种方案应该是可以的,但是我不知道具体怎么做,我在网上找了很久都没有找到,还请楼上的兄弟帮帮忙吧,多谢了。
我已经能够实现把文件加载到matlab中,但是用load以后每一个文件对应出现了一个变量,我不知道怎么将它们合并在一起。

dnping 2008-04-06 09:48

就是利用这些变量,然后用cat命令,这个你看下help;
另外也可以如下:
变量:a=[1 2 3]; b=[1 2 3]; c=[1 2 3]
可以这样合并:
d=[a b c];作为一个行向量
d=[a;b;c];作为一个矩阵
具体情况楼主自己把握……

afen 2008-04-06 22:54

[QUOTE=dnping;7941]就是利用这些变量,然后用cat命令,这个你看下help;
另外也可以如下:
变量:a=[1 2 3]; b=[1 2 3]; c=[1 2 3]
可以这样合并:
d=[a b c];作为一个行向量
d=[a;b;c];作为一个矩阵
具体情况楼主自己把握……[/QUOTE]

这是我写的代码,一共file001.dat,...,file010.dat十个文件,每个文件里分别是数字1,...,10

clear
clc
num_file=10;
for i = 1:num_file
fout=sprintf('file%03d.dat',i);
load(fout,'-ascii');
end

sum_file=file001;
for i=2:num_file
fout=sprintf('file%03d',i);
sum_file=[sum_file,fout];
end

结果在sum_file里,但运行的结果是“dfile002file003file004file005file006file007file008file009file010”,没有存放变量数值,不知道问题出现在什么地方?谢谢。

dnping 2008-04-07 08:33

sprintf不能提取数据……
sprintf命令只是打印的命令,如果要导入文件名的话用uigetfile,或者别的方法,这样load才有效……

afen 2008-04-07 09:30

num_file=10;
for i = 1:num_file
fout=sprintf('file%03d.dat',i);
load(fout,'-ascii');
end

这一段是没有问题的,sprintf是转换了文件名,然后用load加载,运行结果得到10个变量,每一个变量以文件名命名,存储着各文件中的数据。uigetfile我也用过了,效果是一样的。

问题出在下面这一段,如何对10个变量进行合并?
sum_file=file001;
for i=2:num_file
fout=sprintf('file%03d',i);
sum_file=[sum_file,fout];
end
但是我不知道如何修改?多谢了。

afen 2008-04-08 15:54

不知道谁有什么办法啊,我想了很久,都没想出来。

dnping 2008-04-08 17:51

你是load数据进去了,但是没有对其赋予变量名称,你下面的合并相当于只是对文件名进行合并而已,而不是对数据进行合并,你试试如下代码:

sum_file=[];
for i=1:num_file
fout=sprintf('file%03d',i);
S=load(fout,'-ascii');
sum_file=[sum_file,S];
end

上面的代码可能有点错误,你调试一下,不过大致思路还是这样的……

afen 2008-04-08 21:41

多谢了,我再试试看。


所有时间均为北京时间。现在的时间是 19:51

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.