主题:[讨论]gfortran 调用shell的问题
liuqc
[专家分:0] 发布于 2011-01-20 11:06:00
gfortran 调用shell的问题
在gfortran 下 用 call system('')可以把一个文件夹里的文件名全部读出,并输出到一个文本文件中,,可是怎么才能把这些文件名付给程序中的字符变量呢,,,,或者用什么样的语句把这些文件名再读取出来呢
主要用来做批处理用的,构造 文件名比较复杂,也解决不了没规律的文件,,,所以想用上述方法来解决,,,
或者大家有什么好的方法 给我介绍以下,,限于fortran
谢谢!
回复列表 (共3个回复)
沙发
helo_aBiNg [专家分:480] 发布于 2011-01-21 11:18:00
gfortran 中的 system 子程序/函数,只能返回 shell 的执行状态,要获得 shell 中的变量或输出,估计只能求助于万法之王--文件啦。:P
将文件名全路径通过 shell 输出一个临时文件中(你不是已经做到了么?),指定固定格式(比如一行一路径),再由 fortran 处理这个文件,最后 close 文件时顺便删除。
板凳
liuqc [专家分:0] 发布于 2011-01-21 16:10:00
恩,,谢谢你,,,不过我还想问下,,怎么控制SHELL的输出格式,,,我也找了下SHELL的语法,,不过没去学习,,,太乱了,,,,我用的句子好像是
call system('find ....') 来输出指定文件夹下的文件的名字,,,,
看了下 find的语法,,,也看不懂了,,,所以你能不能具体帮我写下这几行
如:
open(10,file='a.txt')
call system('find ..a.out......') !一行一文件名(绝对和相对地址)输出到a.txt文件中
?怎么判断文件的个数呢,从输出文件里判断吗?因为我要定义 字符数组的大小,后面也有循环处理需要知道个数。
read(10,*)chr(:) !把文件名读到字符变量中存储
。。。。后续处理
能不能帮我完善一下,,或者给个具体点的教程地址,,谢谢 呵呵
3 楼
helo_aBiNg [专家分:480] 发布于 2011-01-21 18:08:00
一种是根据文件内容,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/!"
我来回复