2016-03-08 84 views
0

我想爲一個代碼創建輸入文件。它看起來像這樣將數據寫入循環中的列

SITE FREQ DATA TYPE  DATUM    ERROR 
    1  1  1 2.01562 0.217000E-01 
    1  1  2 44.8114  2.86600  
    1  1  5 2.02486 0.217000E-01 
    1  1  6 44.0423  2.86600  
    1  2  1 2.03421 0.217000E-01 
    1  2  2 53.5181  2.86600  
    1  2  5 2.01103 0.217000E-01 
    1  2  6 43.6452  2.86600  
    1  3  1 1.88711 0.217000E-01 
    1  3  2 51.5582  2.86600  
    1  3  5 2.00536 0.217000E-01 
    1  3  6 43.4296  2.86600  
    1  4  1 1.85939 0.217000E-01 
    1  4  2 49.8675  2.86600  
    1  4  5 2.04246 0.217000E-01 
    1  4  6 41.5948  2.86600  
    1  5  1 1.86721 0.217000E-01 
    1  5  2 42.6603  2.86600  
    1  5  5 2.02059 0.217000E-01 
    1  5  6 44.6032  2.86600  
    1  6  1 1.90233 0.217000E-01 
    1  6  2 34.9367  2.86600  
    1  6  5 2.02904 0.217000E-01 
    1  6  6 45.5312  2.86600  
    2  1  1 2.02998 0.217000E-01 
    2  1  2 46.3565  2.86600  
    2  1  5 2.07089 0.217000E-01 
    2  1  6 47.8481  2.86600  
    2  2  1 1.94406 0.217000E-01 
    2  2  2 52.9107  2.86600  
    2  2  5 1.94073 0.217000E-01 
    2  2  6 47.7353  2.86600  
    2  3  1 1.77228 0.217000E-01 
    2  3  2 53.3664  2.86600  
    2  3  5 1.93717 0.217000E-01 

我已經想到了這樣的事情

do i=1,74 
    do j=1,4 
    write(50,)num1,s1(i),dt(j),v1(i),er1 
    end do 
end do 

但數據類型取值1,2,5,6不是1到4,如何解決這個問題?

+0

'INTEGER ITRANS(4)'/'DATA ITRANS/1,2,5,6 /'/'write(50,)num1,s1(i),ITRANS(j),v1(i),er1'?但後來我不知道我明白這個問題:) –

+0

我不太瞭解這兩個循環,他們會產生什麼。你是說'數據類型'是在一個值爲1,2,5,6的4長度向量中嗎?這是你的dt嗎? – zdim

+0

@JoachimIsaksson是的,那是我需要的。 –

回答

1

使用一個循環,你通常會(跌幅超j環路),對應dt值(1,2,5,6),並打印作爲

merge(dt(mod(i,4)), dt(size(dt)), mod(i,4)/=0) 

這是Fortran語言的ternary,產生不dt(mod(i,4))如果mod(i,4)/=0或當mod返回零時dt(size(dt))merge是F95。這每次都會運行mod。或者,你可以製作一個重複1,2,5,6的74長載體,在這種情況下你有一個額外的載體。

0

我不知道我完全理解這個問題,但除非我很離譜的我幀沿着這些路線的解決方案:

integer, dimension(4) :: aux = [1,2,5,6] 
... 
do i=1,74 
    do j=1,4 
    write(50,)num1,s1(i),dt(aux(j)),v1(i),er1 
    end do 
end do 
+0

是的,這也適用。 –