Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
fortran中的输入转换错误_Fortran - Fatal编程技术网

fortran中的输入转换错误

fortran中的输入转换错误,fortran,Fortran,我想读取一个包含字符和数字的20*4维文件,并将其转换为另一个文件,但我总是遇到forrtl服务器(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

我想读取一个包含字符和数字的20*4维文件,并将其转换为另一个文件,但我总是遇到forrtl服务器(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 
  • 我不会在读入时指定格式-这可能会导致问题(对您来说也是如此)
  • 您将前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 
  • 我不会在读入时指定格式-这可能会导致问题(对您来说也是如此)
  • 您将前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 

我想指出的是,您编写的文件的顺序是Ti,Te,Ne,但读取它的顺序是Ne,Te,Ti(即向后)。我想,当你打算使用这些值时,这可能会导致一些问题。我想指出,你编写的文件的顺序是Ti,Te,Ne,但你读取的顺序是Ne,Te,Ti(即向后)。我想当你打算使用这些值时,这会引起一些问题。