1

我想读取一个包含字符和数字的 20*4 尺寸的文件,然后将其转移到另一个文件中,但我总是有 forrtl server(64):fortran 中的输入转换错误,如果有人可以帮助我,我会很感激。

我有一个像这样的输入文件 a.txt (20*4):

index    Ti    Te     Ne

1      2.3    2.5    0.6

2      2.9    3.2    0.8

3      3.4    3.6    1.1

.
.
.

20     7.3     8.9    3.5

我的程序是 test.f90,如下所示:

program test

implicit none

real*8,allocatable  :: prof_Ne(:),prof_Te(:),prof_Ti(:)

integer :: i, j, n_skip, n_prof
character :: index*22

n_prof = 20

allocate(prof_Ne(n_prof), prof_Te(n_prof), prof_Ti(n_prof))

open(21,file='a.txt')

read(21,'(A25)') index

write(*,*) index

n_skip = 4
do i=1,n_skip
  read(21,*)
enddo

do i=1,n_prof
  read(21,'(i2,3e9.5)') j,prof_Ne(i),prof_Te(i),prof_Ti(i)
enddo
close(21)
write(*,*) prof_Ne

end program 
4

1 回答 1

1
  • 我不会在阅读时指定格式 - 这可能会导致问题(就像它对你一样)。
  • 您将前 25 个字符(比第一行多)读入索引 - 可能不是您想要的。更好地使用read(*,*)后跟四个字符串,让 Fortran 决定在哪里将这些字符串分开。
  • 然后你跳过四条记录——为什么?
  • 最后,您将 20 行读入数组 - 在您的情况下超出文件末尾!同样,您指定格式(我不会)...

我对您要达到的目标的猜测如下:

program test

  implicit none

  real*8,allocatable  :: prof_Ne(:),prof_Te(:),prof_Ti(:)

  integer :: i, j, n_prof
  character(len=22) :: index, dummy1, dummy2, dummy3

  n_prof = 20

  allocate(prof_Ne(n_prof), prof_Te(n_prof), prof_Ti(n_prof))

  open(21,file='a.txt')

  read(21,*) index, dummy1, dummy2, dummy3
  write(*,*) index, dummy1, dummy2, dummy3

  do i=1,n_prof
    read(21,*) j,prof_Ne(i),prof_Te(i),prof_Ti(i)
  enddo
  close(21)
  write(*,*) prof_Ne

end program 
于 2013-10-24T10:01:20.260 回答