用于写入.txt文件的双列输出格式

时间:2017-09-30 14:27:16

标签: fortran

这是我的代码:

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循环有没有办法做到这一点? 我希望从代码写专栏列。

2 个答案:

答案 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的某种组合索引它。

风格建议:

  1. 请使用变量之间的空格,就像在写句子时一样。为了易读性,以及所有这些。
  2. 尝试在循环索引中更简洁。例如,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上的可怜人来说这样做。
  3. 注意:

    1. 您不需要trim(adjustl("My Fun Format"))。试一试,你会看到。