24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1525  |  回复: 5

xiaoguai2012

木虫 (正式写手)

[求助] 求助Matlab批处理for语句循环

cd('C:\0.6');%
Allname=struct2cell(dir);
[m,n]=size(Allname);
num1z=zeros(n-2,1);
for j=3:n
    name=Allname{1,j}; %
    [e1,e2,e3] = fileparts(name);
    e4='.txt';
    q=strcmp(e3, e4);
    if 1==q;
        break;
    end
    M=importdata(name,',',6);
    num1=0;CC=1;%变化cc值从0到10,间隔0.1
    for i=1:length(AA)-1;
       if AA(i)<CC&& AA(i+1)>CC ;
         num1=num1+1;
       end
    end
    end
   num1z(j-2,1)=num1;
end
   sum1=sum(num1z);
xlswrite('结果1.xlsx',[sum1],'Sheet1','A2');

----------------------------------------------------------------
我想用上述程序,对文件夹《0.6》内的文件进行批处理,在上述程序的基础上,我想变换CC值,从0到10,间隔0.1,然后输出不同CC值对应的sum1值,并将CC和sum1l列在excel表格中输出,请问各位大侠,怎样才能实现?我已经用for语句试了很多次,可是不行,请求各位大侠帮帮忙!!!
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wang870803

铜虫 (初入文坛)

【答案】应助回帖

★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
jjdg: 金币+1, 感谢参与 2013-08-05 22:48:34
xiaoguai2012: 金币+5, 有帮助 2013-08-07 10:36:29
这个因为你输出语句:xlswrite('结果1.xlsx',[sum1],'Sheet1','A2');
是在循环以后,所以如果CC是一个数的话,只能输出最后一个。最简单的方法就是把CC改成一个向量。在前面先开辟一个CC=0:0.1:10;
2楼2013-08-04 23:46:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xiaoguai2012

木虫 (正式写手)

引用回帖:
2楼: Originally posted by wang870803 at 2013-08-04 23:46:23
这个因为你输出语句:xlswrite('结果1.xlsx',,'Sheet1','A2');
是在循环以后,所以如果CC是一个数的话,只能输出最后一个。最简单的方法就是把CC改成一个向量。在前面先开辟一个CC=0:0.1:10;

cd('C:\0.6');%
Allname=struct2cell(dir);
[m,n]=size(Allname);
num1z=zeros(n-2,1);
for ii=0:0.1:5
    CC=ii;%变化cc值从0到10,间隔0.1
for j=3:n
    name=Allname{1,j}; %
    [e1,e2,e3] = fileparts(name);
    e4='.txt';
    q=strcmp(e3, e4);
    if 1==q;
        break;
    end
    M=importdata(name,',',6);
    num1=0;
    for i=1:length(AA)-1;
       if AA(i)<CC&& AA(i+1)>CC ;
         num1=num1+1;
       end
    end
    end
   num1z(j-2,1)=num1;
end
   sum1=sum(num1z);
xlswrite('结果1.xlsx',[sum1],'Sheet1','A2');
end
vol(ii,1)=iii;
sum1z(ii,1)=sum1;
xlswrite('结果2.xlsx',[vol,sum1z],'Sheet1','A2');
---------------------------------------------------------------------------------
我的程序改成了这样,可是还是不成。程序在运行的时候会逐个输出不同的CC值和其对应的sum1值,但是前一个会被后一个替代,请问我怎样改才能把所有cc值和其对应的sum1值都输出在同一个excel中?
3楼2013-08-05 19:41:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wang870803

铜虫 (初入文坛)

【答案】应助回帖

★ ★ ★ ★ ★
xiaoguai2012: 金币+5, 有帮助 2013-08-09 10:42:22
引用回帖:
3楼: Originally posted by xiaoguai2012 at 2013-08-05 19:41:03
cd('C:\0.6');%
Allname=struct2cell(dir);
=size(Allname);
num1z=zeros(n-2,1);
for ii=0:0.1:5
    CC=ii;%变化cc值从0到10,间隔0.1
for j=3:n
    name=Allname{1,j}; %
     = fileparts(name);
   ...

cd('C:\0.6');
Allname=struct2cell(dir);
[m,n]=size(Allname);
num1z=zeros(n-2,1);
CC=0:0.1:5;  %变化cc值从0到10,间隔0.1
sum1=zeros(1,length(CC));
for ii=1:length(CC)
    for j=3:n
        name=Allname{1,j};
        [e1,e2,e3] = fileparts(name);
        e4='.txt';
        q=strcmp(e3, e4);
        if 1==q
           break;
        end
        M=importdata(name,',',6);
        num1=0;
        for i=1:length(AA)-1
           if AA(i)<CC(ii)&& AA(i+1)>CC(ii)
              num1=num1+1;
           end
        end
    end
........

你的程序要么是你复制不完整,要么就是错了。至少多了一个end。我不知道你是如何把它运行起来的。
4楼2013-08-09 00:26:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xiaoguai2012

木虫 (正式写手)

引用回帖:
4楼: Originally posted by wang870803 at 2013-08-09 00:26:42
cd('C:\0.6');
Allname=struct2cell(dir);
=size(Allname);
num1z=zeros(n-2,1);
CC=0:0.1:5;  %变化cc值从0到10,间隔0.1
sum1=zeros(1,length(CC));
for ii=1:length(CC)
    for j=3:n
        name=Al ...

不好意思,是我错了,应该是下面这样,现在主要是excel输出的问题,能输出,就是前一个输出的内容会被后一个输出的所代替。或者是因为程序中的错误,导致输出有问题。
cd('C:\0.65');%
Allname=struct2cell(dir);
[m,n]=size(Allname);
num1z=zeros(n-2,1);
for ii=0:0.1:5
    CC=ii;%变化cc值从0到10,间隔0.1
  for j=3:n
    name=Allname{1,j}; %
    [e1,e2,e3] = fileparts(name);
    e4='.txt';
    q=strcmp(e3, e4);
    if 1==q;
        break;
    end
    M=importdata(name,',',6);
    num1=0;
    for i=1:length(AA)-1;
       if AA(i)<CC&& AA(i+1)>CC ;
         num1=num1+1;
       end
    end
  
   num1z(j-2,1)=num1;
end
   sum1=sum(num1z);
xlswrite('结果1.xlsx',[sum1],'Sheet1','A2');
end
vol(ii,1)=iii;
sum1z(ii,1)=sum1;
xlswrite('结果2.xlsx',[vol,sum1z],'Sheet1','A2');
5楼2013-08-09 10:45:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wang870803

铜虫 (初入文坛)

【答案】应助回帖

引用回帖:
5楼: Originally posted by xiaoguai2012 at 2013-08-09 10:45:25
不好意思,是我错了,应该是下面这样,现在主要是excel输出的问题,能输出,就是前一个输出的内容会被后一个输出的所代替。或者是因为程序中的错误,导致输出有问题。
cd('C:\0.65');%
Allname=struct2cell(dir) ...

这个在循环里用xlswrite必然会被覆盖的,相当于每次新建一个文件往里写。可以将CC和sum1值都记下来,在循环外写文件。要在循环里写就只能用fopen+fprint了。下面是改过的程序,你可以参考一下。
cd('C:\0.65');
Allname=struct2cell(dir);
[m,n]=size(Allname);
num1z=zeros(n-2,1);

CC=0:0.1:5;  %变化cc值从0到10,间隔0.1
sum1=zeros(size(CC));

for ii=1:length(CC)
    for j=3:n
        name=Allname{1,j}; %
        [e1,e2,e3] = fileparts(name);
        e4='.txt';
        q=strcmp(e3, e4);
        if 1==q;
           break;
        end
        M=importdata(name,',',6);
        num1=0;
        for i=1:length(AA)-1;
            if AA(i)<CC(ii)&& AA(i+1)>CC(ii);
               num1=num1+1;
            end
        end
  
        num1z(j-2,1)=num1;
    end
    sum1(ii)=sum(num1z);
   
end
xlswrite('结果1.xlsx',sum1);        %这是按行写,要是想按列写先将sum1转置.

%下面的两句看不懂,而且按你原来程序,到这里ii已经是一个固定值5.0了
vol(ii,1)=iii;
sum1z(ii,1)=sum1;
xlswrite('结果2.xlsx',[vol,sum1z],'Sheet1','A2');
6楼2013-08-09 12:50:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 xiaoguai2012 的主题更新
信息提示
请填处理意见