2013-05-09 192 views
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-12ST柱: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

我沒有寫這個。 NELEM = 9 – user2365201 2013-05-09 15:05:31

回答

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) 
+0

謝謝,但我的意思是,我希望NUMEL和MATNO在列方向上打印出來。 – user2365201 2013-05-09 15:01:19

+0

哦!對不起,我沒有注意到這一點。編輯過的輸出是實際問題還是缺失? – 2013-05-09 15:14:11

+0

我很抱歉,但我無法理解你的答案。我檢查了調試階段,NUMEL,MATNO和LNODS的大小,價值是我的預期。但是,輸出文本文件不是。我無法解決問題。 – user2365201 2013-05-09 15:35:56

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); 

我通常更喜歡後者的解決方案,因爲它不涉及顯式循環。

+1

我明白了。謝謝!! – user2365201 2013-05-09 19:50:28