2013-04-30 192 views
0

我正在使用Fortran來對大量數據集進行計算,這些數據集被拆分成許多文件。該文件的名稱是:循環遍歷可變文件名

maltoLyo12per-reimage-set1.traj 
maltoLyo12per-reimage-set2.traj 
maltoLyo12per-reimage-set3.traj 

我寫做計算的代碼如下:

fileLoop: do j = 31, 34 

OPEN(unit=31,status='old',file=fileplace//'maltoLyo12per-reimage-set1.traj') 
OPEN(unit=32,status='old',file=fileplace//'maltoLyo12per-reimage-set2.traj') 
OPEN(unit=33,status='old',file=fileplace//'maltoLyo12per-reimage-set3.traj') 
OPEN(unit=34,status='old',file=fileplace//'maltoLyo12per-reimage-set4.traj') 

... operation.... 

close (j) 
end do fileLoop 

在我想要的代碼打開每個文件的時間和關閉它們運行完成計算後。但是上面的代碼會立即打開所有的文件,並在完成計算後一次性關閉它們。

於是,我就修改代碼類似如下:

fileLoop: do j = 31, 34 

OPEN(unit=j,status='old',file=fileplace//'maltoLyo12per-reimage-set1.traj') 

close (j) 
end do fileLoop 

但現在我面臨的文件名有問題。每次循環運行時,文件名都不會因爲文件名中的短語「set1」而改變。我希望文件名中的數字像set1,set2,set3等那樣改變,隨後使用文件單元號31,32,33,34等。

+1

它看起來像你有興趣在這個問題:http://stackoverflow.com/questions/1262695/converting-integers-to-strings-in-fortran。 – milancurcic 2013-04-30 03:45:15

回答

5

類似這樣:(編輯爲單位編號爲31到34名,文件名1〜4)

character (len=90) :: filename 

fileLoop: do j = 31, 34 

write (filename, '("maltoLyo12per-reimage-set", I1, ".traj")') j - 30 
OPEN(unit=j,status='old',file=filename) 

close (j) 
end do fileLoop 
+1

雖然單元編號是31到34,但是文件名是「set1」,...「set4」,所以寫入應該是「write()j-30。 – 2013-04-30 05:58:39

+0

謝謝你的幫助。例如,如果數字變成「set10」,程序將停止運行,如何解決這個錯誤,請大家多多幫助, – Vijay 2013-04-30 10:31:12

+0

如果我使用I2,我會得到像maltoLyo12per-reimage這樣的文件名-set10.traj,maltoLyo12per-reimage-set 9.traj。是「set」和「.traj」之間的空白空間。是否有解決這個問題的方法? – Vijay 2013-04-30 10:42:55