Fortran Coder

查看: 8767|回复: 9
打印 上一主题 下一主题

[文件读写] 文件读取问题

[复制链接]

14

帖子

5

主题

0

精华

入门

F 币
72 元
贡献
44 点
跳转到指定楼层
楼主
发表于 2016-4-12 14:25:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
尝试先把文件内容读入字符串,然后再从字符串里读取信息,但是没有成功。请高手指点!
1  0.1000E+01
2  0.1414E+01
3  0.1732E+01
4  0.2000E+01
5  0.2236E+01
6  0.2449E+01
7  0.2646E+01
8  0.2828E+01
9  0.3000E+01
10  0.3162E+01
这是待读取的文件数据
[Fortran] 纯文本查看 复制代码
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

这是读取的代码(尝试先读入字符串,再读取)但是没有成功,不知道错在哪里,请高手指点!


分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
沙发
发表于 2016-4-12 15:13:51 | 只看该作者
你的文件每行的宽度不一样,无法使用直接方式读取。请用顺序方式读取

[Fortran] 纯文本查看 复制代码
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

14

帖子

5

主题

0

精华

入门

F 币
72 元
贡献
44 点
板凳
 楼主| 发表于 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”中的,宽度应该一样吧?

14

帖子

5

主题

0

精华

入门

F 币
72 元
贡献
44 点
地板
 楼主| 发表于 2016-4-12 15:33:36 | 只看该作者
vvt 发表于 2016-4-12 15:13
你的文件每行的宽度不一样,无法使用直接方式读取。请用顺序方式读取

[mw_shl_code=fortran,true]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”中的,宽度应该一样吧?

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
5#
发表于 2016-4-12 16:15:56 | 只看该作者
如果你确信宽度是一样的,那么请设置合理的 RecL 而不能是 512(除非你实际上就是512)

14

帖子

5

主题

0

精华

入门

F 币
72 元
贡献
44 点
6#
 楼主| 发表于 2016-4-12 18:59:07 | 只看该作者
vvt 发表于 2016-4-12 16:15
如果你确信宽度是一样的,那么请设置合理的 RecL 而不能是 512(除非你实际上就是512) ...

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

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

7#
发表于 2016-4-12 21:19:35 | 只看该作者
有很多编辑器可以帮你数。选择一行,就会自动显示选择了多少个字符。

14

帖子

5

主题

0

精华

入门

F 币
72 元
贡献
44 点
8#
 楼主| 发表于 2016-4-13 16:15:14 | 只看该作者
于鑫常青藤 发表于 2016-4-12 18:59
我现在想问一件事情:recl 应该如何确定?如果一行内容很多,是一个个数出来? ...

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

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

9#
发表于 2016-4-14 08:37:05 | 只看该作者
windows 下 notepad2,notepad++,Programmer's notepad,gvim,sublime
linux 下 vim,emacs,sublime

14

帖子

5

主题

0

精华

入门

F 币
72 元
贡献
44 点
10#
 楼主| 发表于 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语言的自由折叠(任意一段代码)?
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-4 07:08

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表