代码之家  ›  专栏  ›  技术社区  ›  Ludo

在for循环中使用matab的fopen创建多个文本文件

  •  2
  • Ludo  · 技术社区  · 11 年前

    我对Matlab和编程很熟悉,希望在以下方面得到一些帮助。我在网站上找过这里,但找不到答案。

    我试图使用for循环和fprintf来给我一堆单独的文本文件,它们的文件名包含我用于for循环的索引。例如,请参阅以下代码,了解我想做的事情:

    for z=1:20
        for x=1:z;
            b=[x exp(x)];
            fid = fopen('table z.txt','a');
            fprintf(fid,'%6.2f, %6.2f\n',b);
            fclose(fid);
        end  
    end
    

    我要找的是一个脚本,它(在本例中)为我提供了20个名为“table I.txt”的单独.txt文件(I是1到20),其中 表1.text仅包含[1,exp(1)], 表2.txt包含[1,exp(1)]\newline[2,exp(2)] 等等

    如果我运行上面的脚本,我只得到一个文本文件(名为“table z.txt”,下面附加了所有数据。因此fopen的命名不会“感觉”z值,而是将z解释为一个字母(看到引号并不会让我感到惊讶)

    我想一定有一种优雅的方式可以做到这一点,但我还没有找到。我希望有人能帮忙。 最好的 L

    2 回复  |  直到 11 年前
        1
  •  1
  •   Robert Seifert    11 年前

    使用 num2str 和字符串连接 [ ... ] .

    fid = fopen( ['table ' num2str(z) '.txt'],'a');
    
        2
  •  0
  •   Jonathan H    11 年前

    在最里面的循环中打开文件是低效的,您应该尽快创建一个文件 z (参见下面的示例)。要以与fprintf相同的方式格式化字符串,可以使用 sprintf .

    for z=1:20
        fname = sprintf('table %d.txt',z);
        fid = fopen(fname,'w');
        for x=1:z
            fprintf(fid,'%6.2f, %6.2f\n', x, exp(x));
        end
        fclose(fid);
    end