我有这样的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 ...
问题是什么?
答案 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);
我通常更喜欢后一种解决方案,因为它不涉及显式循环。