在Fortran中读取具有未知数行的文件



英雄我使用的新代码。我已经尝试过,如果我先声明了n,那不是我想要的。我需要知道行总数(n(并在我的模拟中使用该数字。但是,在变量声明中,我需要在阅读数据之前要减少xy(n(,如果这样做,则代码不会运行。

数据文件是随机模拟的正常数据的两列

让我们说这样的话

1  3
2  4
3   6
4  8
5   9
6  8
7   1
8  9
99  88

我尝试了以下代码来确定N,但它不起作用!

     program reading
implicit none
integer,allocatable :: a(:,:)
  integer :: pair(2)
  integer :: unit, n, io,k
!!!variable declaration 
 real, dimension(1:n)::x,y
 integer:: T, I1, I2, I3, i, j, dist
open(2, file = 'xyBVNData_R.txt', status = 'old', action = 'read')

n = 0 
DO
  READ(2,*,iostat=io)
  IF (io/=0) EXIT
  n = n + 1
END DO
CLOSE (2)
  print*, n

 DO i=1,n!!!
  DO j=1,n!!
 dist=0.0
 DIST = dist+(sqrt((x(i)-x(j))**2 + (y(i)-y(j))**2))
 ENDDO
     ENDDO
 !!! writing and saving 
 Do i= 1, n 
  write(*,*) i, x(i)
 ENDDO
end program reading

您无法声明具有未知维度的变量"尺寸(1:n("。

此程序首先读取文件以确定行数:

program reading
  implicit none
!  variable declaration 
  real, dimension(:) ,allocatable :: x ,y 
  real :: dist
  integer:: i, j ,n ,io
  open(2, file = 'xyBVNData_R.txt', status = 'old', action = 'read')
  n = 0 
  DO
    READ(2,*,iostat=io)
    IF (io/=0) EXIT
    n = n + 1
  END DO
  print*, n
  allocate( x(n) ,y(n) )
  rewind(2)
  DO i =1,n
    READ(2,*) x(i),y(i)
  END DO
  dist=0.0
  DO i=1,n
    DO j=1,n
      dist = dist + sqrt( (x(i)-x(j))**2 + (y(i)-y(j))**2 )
    END DO
  END DO
  ! writing and saving 
  DO i= 1, n 
    write(*,*) i, x(i)
  END DO
end program reading

另一种替代方案(Fortran 2003(,它通过添加新元素在读取新线时添加新元素来重新关注xy

program reading
  implicit none
!  variable declaration 
  real, dimension(:) ,allocatable :: x ,y 
  real :: dist ,x_tmp ,y_tmp
  integer:: i, j ,n ,io
  open(2, file = 'xyBVNData_R.txt', status = 'old', action = 'read')
  n = 0 
  allocate( x(0) ,y(0) )
  DO
    READ(2,*,iostat=io) x_tmp,y_tmp
    x = [x,x_tmp]
    y = [y,y_tmp]
    IF (io/=0) EXIT
    n = n + 1
  END DO
  print*, n
  dist=0.0
  DO i=1,n
    DO j=1,n
      dist = dist + sqrt( (x(i)-x(j))**2 + (y(i)-y(j))**2 )
    END DO
  END DO
  ! writing and saving 
  DO i= 1, n 
    write(*,*) i, x(i)
  END DO
end program reading

最新更新