fprintf混合了字符串和数字

时间:2012-03-01 19:40:12

标签: matlab printf

我想制作一个包含字符串和数字混合的文本文件。示例如下:

clear all
fakeData = @(location) struct('Location',location,'AirT',rand(320,1),'SolRad',rand(320,1),'Rain',rand(320,1));
  s(1) = fakeData('England');
  s(2) = fakeData('Wales');
  s(3) = fakeData('Scotland');
  s(4) = fakeData('Ireland');
FieldName = {s.Location};
R = corrcoef([s.AirT],'rows','pairwise');
R_Values = [FieldName(nchoosek(1:size(R,1),2)) num2cell(nonzeros(tril(R,-1)))];
MeanCorr = mean(cell2mat(R_Values(:,3)));
Headings = {'L1','L2','Correlation'};
R_Values1 = [Headings;R_Values];
R_Values1 = [R_Values1; {'','Mean',MeanCorr}];

为了打印R_Values,我只需输入:

 for i=11:length(R_Values);
fprintf(1,'%12s\t%12s\t%9.6f\n',R_Values{i,1},R_Values{i,2},R_Values{i,3})
  end

但是,当尝试为R_Values1执行此操作时,我失败了,我不知道如何在R_Values1的第一行和最后一行中允许不同的格式。

2 个答案:

答案 0 :(得分:2)

在MATLAB中:要在同一个文件中编写字符串和数字,您需要

1)使用sprintf

将数字转换为格式化字符串

2)连接所有字符串

3)使用fprintf写入文件

示例:您要将Nx1数组字符串和Nx1数组编号写入Fileout.txt

    % define output file and clean old versions:
    fileout='Fileout.txt'
    system(['rm -f ' fileout]);

    % open output file in the 'a'ppend mode
    fid=fopen(fileout,'a');

    % loop over all lines of both arrays:
    for i= 1:size(Numbers,1)
        s = sprintf('%10.3f',Numbers(i));
        fprintf(fid,'%s\n',[Strings(i,:) s]);
    end

答案 1 :(得分:1)

由于标题行的格式与数据行不同,因此我看到两个选项。

  1. 使用单独的fprintf语句或<; li>打印标题行
  2. 使用xlswrite将单元格数组R_Values1写入文件。根据MATLAB documentation'xlswrite'将创建一个CSV文件,如果Excel不可用,否则它将创建可能不适合您的Excel文件。
  3. 也许其他人可能对处理标题行有不同的建议。