将数据写入文本输出文件

时间:2013-05-09 14:43:10

标签: matlab printf

我有这样的input.dat:

1  1  1  2  3  10  17  16 15 8  9
2  1  3  4  5  12  19  18 17 10 11
3  1  5  6  7  4   21  20 19 12 13
4  1  15 16 17 24  31  30 29 22 23

第1栏:数字
第二栏:matno
第3至第12栏:lnods

我写了如下;

fprintf(FID6,'N  PRO     POINTS \n');

MATNO=zeros(4,1);
LNODS=zeros(4,9);

 for IELEM=1:NELEM

 NUMEL(IELEM,:)=fscanf(FID5, '%d', 1);
 MATNO(IELEM,:)=fscanf(FID5, '%d', 1);
 LNODS(IELEM,:)=fscanf(FID5, '%d  %d  %d  %d  %d  %d  %d  %d  %d',[9,1]);

  end

  fprintf(FID6, '%-2d           %-2d        %-2d  %-2d  %-2d  %-2d  %-2d  %-2d  %-2d  %-2d  %-      2d\n',NUMEL,MATNO,LNODS); 

我期待:

N  PRO                 POINTS
1   1    1   2   3   10   17   16   15   8   9 
2   1    3   4   5   12   19   18   17   10  11
3   1    5   6   7   4    21   20   19   12  13
4   1    15   16  17  24   31   30   29   22  23

N  PRO                 POINTS
1   2    3   4   1   1   1   1   1  3   5
15  2    4   6   16  ...

问题是什么?

2 个答案:

答案 0 :(得分:0)

使用标签而不是普通空格。更干净。

例如:

fprintf(FID6, '%-2d\t%-2d\t%-2d  %-2d  %-2d  %-2d  %-2d  %-2d  %-2d  %-2d  %-2d\n',NUMEL,MATNO,LNODS); 

还有间距,为什么要放%-2d?尝试%4d或其他东西并删除空格

fprintf(FID6,'%4d\t%4d\t%4d%4d%4d%4d%4d%4d%4d%4d%4d\n',NUMEL,MATNO,LNODS)

答案 1 :(得分:0)

尝试使用fprintf将矩阵写入文件时,这是一个常见的陷阱。 fprintf按列顺序排列数据,而不是按行排序。

在您的情况下,最简单的解决方案是添加for循环,就像您对输入所做的那样:

for k = 1:numel(NUMEL)
    fprintf(FID6, '%-2d\t%-2d\t%-2d  %-2d  %-2d  %-2d  %-2d  %-2d  %-2d  %-2d  %-2d\n', NUMEL(k), MATNO(k), LNODS(k, :));
end

或者,您可以根据值创建一个大矩阵,并将其转置传递给fprintf

A = [NUMEL, MATNO, LNODS].';  %// Note the transpose operator .'
fprintf(FID6, '%-2d\t%-2d\t%-2d  %-2d  %-2d  %-2d  %-2d  %-2d  %-2d  %-2d  %-2d\n', A);

我通常更喜欢后一种解决方案,因为它不涉及显式循环。