0

我有 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 列:numel
第 2 列: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  ...

问题是什么?

4

2 回答 2

0

Use tabs instead of plain spaces. Much cleaner.

For example:

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

And also spacing, why put %-2d? try %4d or something and remove whitespaces

fprintf(FID6,'%4d\t%4d\t%4d%4d%4d%4d%4d%4d%4d%4d%4d\n',NUMEL,MATNO,LNODS)
于 2013-05-09T14:45:05.077 回答
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);

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

于 2013-05-09T16:43:05.910 回答