这是我的代码:
Program Output_manipulation
Implicit none
Integer::i, j, k, i_index_1, i_index_2
Integer,parameter:: Br_sn_cvo=3, Br_nn_cv=2, Br_nn_mre=2, Le=350
Character(Le),parameter:: fmtB_1_1 = "(*(2x,i3,'.',2x,f5.2,1x,'j',1x,f5.2))"
Complex,parameter:: S_pot=cmplx((2.3,3.4))
Open(Unit=15,File='Output.txt',Status='Unknown')
Do k = 1, Br_nn_mre
i_index_1= Br_sn_cvo + Br_nn_mre + 1 + Br_nn_cv*(k-1)
i_index_2= Br_sn_cvo + Br_nn_mre + 1 + k*Br_nn_cv-1
Write(15,fmtB_1_1)i_index_1,S_pot,i_index_2,S_pot
End Do
Close(Unit=15,Status='Keep')
End Program Output_manipulation
Output.txt
的内容是:
6. 2.30 j 3.40 7. 2.30 j 3.40
8. 2.30 j 3.40 9. 2.30 j 3.40
我打算在Outpur.txt
中获取此内容:
6. 2.30 j 3.40 8. 2.30 j 3.40
7. 2.30 j 3.40 9. 2.30 j 3.40
我不知道如何在.txt文件中为这种写法创建格式。 用隐含的do循环有没有办法做到这一点? 我希望从代码写专栏列。
答案 0 :(得分:0)
这是一个带有隐含的do-loop的老派版本
Program Output_manipulation
Implicit none
Integer::i,j
Open(Unit=15,File='Output.txt',Status='Unknown')
Do j=1,3
Write(15,'(3(2x,i0,2x,"Thing_",i0))') (i+j,i,i=1,3)
End Do
Close(Unit=15,Status='Keep')
End Program Output_manipulation
答案 1 :(得分:0)
在此代码段中,仅使用了一个do-loop。循环索引irow
的范围为0:nrows-1
,其中nrows
是任何正整数,因此可以在不更改算法的情况下进行调整。可以根据您需要的任何变量/参数计算初始左侧列标签min
,例如min=a+b
。您还可以使用相同的逻辑扩展此处显示的技术以写入两列以上,但您仍然只需要一个do-loop。
!! ... types used in this snippet:
implicit none
integer :: a, b, nrows, min, irow, idx_column1, idx_colum2
complex :: spot = complx(2.3,3.4)
character(len=48) :: form
!! ... other code, assignments, etc.
form = "(*(2x,i3,'.',2x,f5.2,1x,'j',1x,f5.2))"
min = a + b
do irow = 0, nrows-1
idx_column1 = min + irow
idx_column2 = min + nrows + irow
write(*, form) idx_column1, spot, idx_column2, spot
enddo
示例输出,nrows=3
:
12. 2.30 j 3.40 15. 2.30 j 3.40
13. 2.30 j 3.40 16. 2.30 j 3.40
14. 2.30 j 3.40 17. 2.30 j 3.40
如果你实际打印到每一行的东西是一个变量数组,你可以使用min, nrows, irow, idx_column1, idx_column2
的某种组合索引它。
风格建议:
i=Br_sn_cvo+Br_nn_mre+1+Br_nn_cv*(k-1),Br_sn_cvo+Br_nn_mre+1+k*Br_nn_cv-1
真的很难阅读,或者(对我而言)需要阅读。至少对我们StackOverflow上的可怜人来说这样做。注意:
trim(adjustl("My Fun Format"))
。试一试,你会看到。