Fortran 每隔6行和7行打印一次

Fortran 每隔6行和7行打印一次,fortran,Fortran,我想写一个FORTRAN程序来读取所有的行,并且我想打印输出文件中每第7行和第8行由空白行分隔的数据集。我放了一个输入文件。请告诉我 提前谢谢你 -4.164945E+05 3.001334E+02 -4.772577E+05 7.889016E+04 -5.561479E+05 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -4.088580E+05 2.997668E+02 3.848513E+04 -1.806

我想写一个FORTRAN程序来读取所有的行,并且我想打印输出文件中每第7行和第8行由空白行分隔的数据集。我放了一个输入文件。请告诉我

提前谢谢你

 -4.164945E+05  3.001334E+02 -4.772577E+05  7.889016E+04 -5.561479E+05
  0.000000E+00  0.000000E+00  0.000000E+00  0.000000E+00 -4.088580E+05
  2.997668E+02  3.848513E+04 -1.806741E+06  5.561488E+05  0.000000E+00
  0.000000E+00  0.000000E+00  0.000000E+00  2.284295E+05  0.000000E+00
  0.000000E+00  0.000000E+00  9.000000E+01  9.000000E+01  9.000000E+01
  0.000000E+00  5.478642E-01  0.000000E+00  0.000000E+00  0.000000E+00
  0.000000E+00  4.667412E-01 -2.655381E-01 -2.928033E-01 -2.655381E-01
  5.437324E-01  1.816853E-01 -2.928033E-01  1.816853E-01  6.331191E-01

 -4.165192E+05  3.002662E+02 -4.773093E+05  8.116229E+04 -5.584716E+05
  0.000000E+00  0.000000E+00  0.000000E+00  0.000000E+00 -4.012512E+05
  2.993096E+02  1.573615E+04 -1.839001E+06  5.584725E+05  0.000000E+00
  0.000000E+00  0.000000E+00  0.000000E+00  2.284295E+05  0.000000E+00
  0.000000E+00  0.000000E+00  9.000000E+01  9.000000E+01  9.000000E+01
  0.000000E+00  1.095372E+00  0.000000E+00  0.000000E+00  0.000000E+00
  0.000000E+00  1.223969E+00 -2.234850E-04 -1.602426E-01 -2.234850E-04
  1.005241E+00  2.884689E-02 -1.602426E-01  2.884689E-02  1.056905E+00

 -4.165735E+05  3.013409E+02 -4.775812E+05  7.969518E+04 -5.572764E+05
  0.000000E+00  0.000000E+00  0.000000E+00  0.000000E+00 -4.067039E+05
  3.015952E+02  3.190769E+04 -1.818406E+06  5.572773E+05  0.000000E+00
  0.000000E+00  0.000000E+00  0.000000E+00  2.284295E+05  0.000000E+00
  0.000000E+00  0.000000E+00  9.000000E+01  9.000000E+01  9.000000E+01
  0.000000E+00  7.080812E-01  1.157779E+00  1.385668E+00  5.455691E-01
  2.982146E-01  5.921261E-01  7.954344E-02  1.724112E-01  7.954344E-02
  7.981127E-01 -3.378208E-02  1.724112E-01 -3.378208E-02  7.340048E-01

 -4.165731E+05  2.994772E+02 -4.772035E+05  8.034912E+04 -5.575527E+05
  0.000000E+00  0.000000E+00  0.000000E+00  0.000000E+00 -4.041375E+05
  2.974779E+02  2.428109E+04 -1.827365E+06  5.575535E+05  0.000000E+00
  0.000000E+00  0.000000E+00  0.000000E+00  2.284295E+05  0.000000E+00
  0.000000E+00  0.000000E+00  9.000000E+01  9.000000E+01  9.000000E+01
  0.000000E+00  8.921716E-01  1.969410E+00  2.318855E+00  7.271637E-01
  6.363283E-01  7.974565E-01 -1.911601E-01 -9.800037E-02 -1.911601E-01
  7.979089E-01 -5.302858E-02 -9.800037E-02 -5.302858E-02  1.081150E+00

如果您确定您的数据都有8行,每行有一个分隔符,一行最多有80个字符,您可以这样做

  character*80 :: inline
  integer      :: i, imod, stat

  open(1,file='infile')
  open(2,file='outfile',status='unknown')

  i = 0
  do
     i = i + 1
     read(1,'(80a)',iostat=stat) inline
     if (stat/=0) then !EOF reached
        exit
     end if 

     imod = mod(i-1,9) + 1
     if (imod>=7 .and. imod<=9) then
        write(2,*) inline
     end if
  end do

这将在计算行数时逐行读取输入文件,直到到达文件结尾或其他读取错误,以避免无限循环。如果行号与7-8-9模9一致,则它将打印它,这将自动保留分隔线。

到目前为止您尝试了什么?是第6-7行还是第7-8行?你的标题和文字不匹配。我添加了一个答案,但你真的应该先尝试一下。你熟悉fortran吗?你为什么要用fortran来解决这个问题?@Ross,我猜这个问题被分配到了OP.*轻推轻推眨眼*嗨,非常感谢!!!它正在工作。我刚开始学习FORTRAN…我想我也喜欢它。@cjana,我很高兴能帮上忙。请考虑将我的答案标记为已接受。另外:fortran对于许多应用程序来说可能非常麻烦。特别是对于这个问题中的文件和字符串操作,其他更现代的语言可能更有用。@cjana,例如,您可以使用awk脚本达到相同的效果:awk'NR%9>=7 | | NR%9==0'infle。虽然这考虑了mod9,9=0,我们也可以在fortran版本中这样做。但我的观点是,这不是一个使用fortran的特别好的领域:Hi@Andras Desk,当然!谢谢!