于鑫常青藤 发表于 2016-4-12 14:25:11

文件读取问题

尝试先把文件内容读入字符串,然后再从字符串里读取信息,但是没有成功。请高手指点!
10.1000E+01
20.1414E+01
30.1732E+01
40.2000E+01
50.2236E+01
60.2449E+01
70.2646E+01
80.2828E+01
90.3000E+01
100.3162E+01
这是待读取的文件数据
program ex33
    implicit none
    integer :: a, b, fileid, k, error
    character (len=512):: str
    character (len=512) :: filename="ex32.txt"
    open (newunit=fileid, file=filename, form="formatted", access="direct", recl=512, status="old")
    do while (.true.)
      read (*,*) k
      read (fileid, "(a512)", rec=k, iostat=error) str
      if (error/=0) exit
      read (str, *) a, b
      write (*,*) a, b
    end do
    close (fileid)
end
这是读取的代码(尝试先读入字符串,再读取)但是没有成功,不知道错在哪里,请高手指点!


vvt 发表于 2016-4-12 15:13:51

你的文件每行的宽度不一样,无法使用直接方式读取。请用顺序方式读取

program ex33
implicit none
integer :: i , a, b, fileid, k, error
character (len=512):: str
character (len=512) :: filename="ex32.txt"
open (newunit=fileid, file=filename , status="old") !//采用有格式顺序读写
do
    read (*,*) k
    rewind(fileid)
    do i = 1 , k - 1
      read( fileid , * )
    end do
    read ( fileid, "(a512)", iostat=error ) str
    if (error/=0) exit
    read (str, *) a, b
    write (*,*) a, b
end do
close (fileid)
end

于鑫常青藤 发表于 2016-4-12 15:31:33

open (newunit=fileid, file=filename, status="new",access="sequential", form="formatted", recl=16)
do i=1,10,1
    !write (fileid,"(i2, 2xE10.4)") i, sqrt(real(i))
end do
close(fileid)
带读取的文件是按照统一的格式输出到“ex32.txt”中的,宽度应该一样吧?

于鑫常青藤 发表于 2016-4-12 15:33:36

vvt 发表于 2016-4-12 15:13
你的文件每行的宽度不一样,无法使用直接方式读取。请用顺序方式读取

program...

open (newunit=fileid, file=filename, status="new",access="sequential", form="formatted", recl=16)
do i=1,10,1
    !write (fileid,"(i2, 2xE10.4)") i, sqrt(real(i))
end do
close(fileid)
带读取的文件是按照统一的格式输出到“ex32.txt”中的,宽度应该一样吧?

vvt 发表于 2016-4-12 16:15:56

如果你确信宽度是一样的,那么请设置合理的 RecL 而不能是 512(除非你实际上就是512)

于鑫常青藤 发表于 2016-4-12 18:59:07

vvt 发表于 2016-4-12 16:15
如果你确信宽度是一样的,那么请设置合理的 RecL 而不能是 512(除非你实际上就是512) ...

我现在想问一件事情:recl 应该如何确定?如果一行内容很多,是一个个数出来?

fcode 发表于 2016-4-12 21:19:35

有很多编辑器可以帮你数。选择一行,就会自动显示选择了多少个字符。

于鑫常青藤 发表于 2016-4-13 16:15:14

于鑫常青藤 发表于 2016-4-12 18:59
我现在想问一件事情:recl 应该如何确定?如果一行内容很多,是一个个数出来? ...

好,谢谢。你给我推荐一款大家常用的编辑器吧。

fcode 发表于 2016-4-14 08:37:05

windows 下 notepad2,notepad++,Programmer's notepad,gvim,sublime
linux 下 vim,emacs,sublime

于鑫常青藤 发表于 2016-4-14 22:21:30

fcode 发表于 2016-4-14 08:37
windows 下 notepad2,notepad++,Programmer's notepad,gvim,sublime
linux 下 vim,emacs,sublime ...

太感谢你了,不过哪一款软件可以实现fortran语言的自由折叠(任意一段代码)?
页: [1]
查看完整版本: 文件读取问题