Fortran Coder

查看: 33577|回复: 3
打印 上一主题 下一主题

[文件读写] fortran如何批量读入txt文件!

[复制链接]

12

帖子

3

主题

0

精华

入门

F 币
73 元
贡献
48 点
跳转到指定楼层
楼主
发表于 2017-2-7 20:11:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
欧巴们~本人是fortran新手,想要批量处理一大堆txt文件,但是现在不知道如何批量读入。求指点!!!!!
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1642 元
贡献
709 点

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

沙发
发表于 2017-2-7 20:30:24 | 只看该作者
方法一:
考虑如下情形:假设存在100 个文件,分别存储了1900-1999 年的降雨量,现在需要计
算着100 年的总降雨量。文件名为:前缀+年份+后缀,例如:降雨量-1900.dat、降雨量
-1901.dat 。由于文件名是有规律的,仅年份变化,可以用循环来一次读取文件。
[Fortran] 纯文本查看 复制代码
program test
  integer i
  real s, a
  character(20):: filename='降雨量-1234.dat'
  s = 0.0
  do i=1900, 1999
    !内部文件读写,将filename 第8-11 字符换为相应年份
    write(filename(8:11),'(i4)') i
    open(11,file=filename)
    read(11,*) a
    close(11)
    s = s + a
  end do
end program

这种方法优点是可以按顺序读取文件,缺陷也很明显,只能处理有规律的文件名。

方法二:
如果文件名没有规律,使用另一种方法。先用命令行指令将需要处理的文件的文件名写
入另外一个文件当中:
call system ('dir *.txt /b > 1.dat' )
上述代码含义:找出工作目录下所有txt 文件,将其文件名存入1.dat 当中,注意二者的
后缀不应相同(txt, dat)。为了避免错误,需要事先删除无用的txt 文件。修改命令行指令,
可以找出任意符合条件的文件,比如找出上例中存储降雨量的文件:
call system ('dir 降雨量-*.dat /b > 1.txt' )
完整代码如下:
[Fortran] 纯文本查看 复制代码
program test
  integer i
  real s, a
  character(512):: filename
  !文件1.dat 中存储工作目录下所有txt 文件列表
  call system ('dir *.txt /b > 1.dat' )
  s = 0.0
  open(10,file='1.dat')
  do
    !读取文件名
    read(10,'(a)',iostat=i) filename
    if(i/=0) exit
    open(11,file=filename)
    read(11,*) a
    close(11)
    s = s + a
  end do
  close(10,status='delete') !关闭并删除文件1.dat
end program

方法二优点是不要求文件名称有很强规律性,缺点是处理每个文件的顺序是未知的。如
果文件个数不多,且需要按顺序处理,可以手动生成文件列表。

方法三,仅限于 IVF 编译器:
http://doinfolder.w.fcode.cn/

12

帖子

3

主题

0

精华

入门

F 币
73 元
贡献
48 点
板凳
 楼主| 发表于 2017-2-7 20:54:53 | 只看该作者
特别感谢你的回复!我这就尝试一下!

10

帖子

2

主题

0

精华

入门

F 币
60 元
贡献
35 点
地板
发表于 2017-2-28 18:10:11 | 只看该作者
雪球大大威武
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-26 08:53

Powered by Tencent X3.4

© 2013-2024 Tencent

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