回 帖 发 新 帖 刷新版面

主题:[讨论]gfortran 调用shell的问题



gfortran 调用shell的问题

  在gfortran 下 用 call system('')可以把一个文件夹里的文件名全部读出,并输出到一个文本文件中,,可是怎么才能把这些文件名付给程序中的字符变量呢,,,,或者用什么样的语句把这些文件名再读取出来呢
 

    主要用来做批处理用的,构造 文件名比较复杂,也解决不了没规律的文件,,,所以想用上述方法来解决,,,
  或者大家有什么好的方法 给我介绍以下,,限于fortran 
  谢谢!

回复列表 (共3个回复)

沙发

gfortran 中的 system 子程序/函数,只能返回 shell 的执行状态,要获得 shell 中的变量或输出,估计只能求助于万法之王--文件啦。:P

将文件名全路径通过 shell 输出一个临时文件中(你不是已经做到了么?),指定固定格式(比如一行一路径),再由 fortran 处理这个文件,最后 close 文件时顺便删除。

板凳


恩,,谢谢你,,,不过我还想问下,,怎么控制SHELL的输出格式,,,我也找了下SHELL的语法,,不过没去学习,,,太乱了,,,,我用的句子好像是
  call system('find ....')  来输出指定文件夹下的文件的名字,,,,


看了下 find的语法,,,也看不懂了,,,所以你能不能具体帮我写下这几行

如:
   open(10,file='a.txt')
   call system('find ..a.out......')  !一行一文件名(绝对和相对地址)输出到a.txt文件中
   ?怎么判断文件的个数呢,从输出文件里判断吗?因为我要定义 字符数组的大小,后面也有循环处理需要知道个数。
   read(10,*)chr(:)   !把文件名读到字符变量中存储
   。。。。后续处理


能不能帮我完善一下,,或者给个具体点的教程地址,,谢谢  呵呵

3 楼

一种是根据文件内容,fortran 中动态判断 EOF 确定文件行数,在 shell 中重定向即可,比如:
find dir > /full/path/to/a.txt
dir 一定是文件夹全路径名。

另一种不算更好的办法是,先在 shell 中将文件个数 dump 到 a.txt 的首行,比如:
ls dir | wc -l > /full/path/to/a.txt
然后再利用 >> 追加模式添加文件名。这需要 call 两次 system,或者在一个 system 中命令用 ; 隔开。

以前的 f77 貌似必须用后一种方法,自从 f90 引进 allocatable 之后,前一种方法就可行了。

另外,你的 open 语句最好放到 system 被 call 之后,Linux 下文件系统缓存是默认开启的,后面 read 语句不定能读到你刚刚 dump 的内容。

find 命令实在太强大,尤其在条件复杂时。如果目录只一层结构的话,ls 命令也行:
dir="/full/path/to/dir"; ls -1 $dir | sed "s!^!$dir/!"

我来回复

您尚未登录,请登录后再回复。点此登录或注册