在读取数据时出错

use*_*852 0 fortran fortran90

我有一个数据文件,其中以这种方式填充数据

1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
    .
    .

    .

    .
    .
91 92 93 94 95 96 97 98 99 100
Run Code Online (Sandbox Code Playgroud)

我想将这些数据存储在(10,10)的矩阵中,这是我的程序

program test
integer j,n,m
character,dimension(10,10) ::text
character*50 line
open(unit=3,file="tmp.txt",status='old')
n=1
read(3,"(a50)"),line

read(line,*,end=1),(text(1,i),i=1,10)
1 read(3,"(a50)",end=3),line
n=n+1
read(line,*,end=1)(text(n,i),i=i,10)

3 close(3)

end program test
Run Code Online (Sandbox Code Playgroud)

但我没有得到正确的价值观.

ban*_*ish 5

假设您对将数字存储为整数感到满意,最简单的方法是这样做:

    PROGRAM read_data

    integer :: i
    integer :: numbers(39,39)
    character(10) :: infile = "data.dat"
    character(10) :: outfile = "output.dat"

    open(1,file=infile)
    open(2,file=outfile)

    do i=1,39
        read(1,*) numbers(i,1:39)
    end do

    !write output to check
    do i=1,39
        write(2,'(39I5)') numbers(i,1:39)
    end do

    close(1)
    close(2)

    END PROGRAM
Run Code Online (Sandbox Code Playgroud)

我不建议使用字符串来存储任何类型的变量,因为Fortran不太善于字符串处理.如果您在某些时候需要将数据用作字符串,请将其写入字符串变量,就像写入文件一样:

write(my_string,'(I5)') numbers(1,1)
Run Code Online (Sandbox Code Playgroud)

编辑:更改代码以读取39x39大小的数组而不是10x10.