文档详情

Fortran中批量处理文件的方法总结 (2).doc

发布:2017-06-09约字共7页下载文档
文本预览下载声明
Fortran中批量处理文件的方法总结 —循环读取目录下的所有符合条件的文件一、简单的介绍 ? ? 在一年之前,我写过一个程序,主要是对Micaps资料进行批量处理,将逐日资料处理为旬、月的数据,在那个程序中,始终有一个问题困扰我,就是如何自动生成该读取的下一个文件名,这使我真正开始关注fortran中的批处理,时隔一年,决定写下这些文字,将我用到的一些fortran批处理的方法和大家共享,交流。 ? ? 对于那些只要会用程序,不求其中原理的朋友,请马上跳过这些文字,直接去下载附件吧!程序里有使用说明,但是,如果你不懂原理,估计现成的程序你使用起来也会碰壁哦! ? ? 这里所说的批处理是指对某一个目录下的指定后缀的文件的批量读取和处理。 ? ? 我总结的批处理方法大概可以用下面这个示意图来说明: | | |将文件目录写入一个文本文件,供fortran循环读取 |————手动输入文件名 |————运行程序之前命令行工具导出文件名 |————程序运行后,未开始计算之前,生成文件名 |? ?? ?? ?————调用CMD命令生成 |? ?? ?? ?————GETFILEINFOQQ方法生成 |? ?? ?? ?————调用WIN32API生成 | |在程序运行时动态生成文件名 | | ? ?? ? 对于第一种方法,我将主要介绍如何将目录写入文件,然后举出一个小的示例来验证。第二种方法主要是说明其思路。 二、方法的介绍 1、??将文件目录写入一个文本文件,供fortran循环读取 1.1、? ???手动输入文件名 这是最基本的方法啦,如果文件个数不多,而且文件名中包含了空格等特殊字符的话,建议使用这种方法,在这里就不多说啦,至于在fortran中的处理,等几个小方法介绍完之后会有一个例子来说明。 1.2、? ???运行程序之前命令行工具导出文件名 ? ? 这是一个既高效又保险的方法,主要思路就是通过强大的CMD命令列出目录下的文件到一个指定的文件中,然后由fortran去循环读取该文件中的文件名信息,从而批量处理。 ? ? a、 从运行工具打开你的CMD窗口; ? ? b、转到要处理的当前目录(可省略):CD /d 路径,如: ? ? CD /d??e:\test?? ? ? 这样可以快速到达e:\test目录 ? ? c、 使用DIR命令列出文件目录信息到指定的文件,通常使用的 ? ? Dir??*.*新文件名??这个命令在这里已经不能满足要求,因为会列出一堆对于我们处理而言无用的信息,现在要使用的命令是: ? ? DIR??/b??filternewfile ? ? 注意,其中的filter为文件筛选,必须自己修改为所需的,比如你可以把它改成*.txt,这样,就会列出当前目录下的所有txt结尾的文件了。 Newfile就是你需要存放文件名的那个文件,比如可以是 dir.txt,这样就成了??dir /b*.txtdir.txt,就会把当前目录下的所有文件都列出到dir.txt文件中,当然,由于dir.txt也在当前目录,所以也会被算进去,这在处理的时候是需要注意的,下面几种方法中同样考虑了这个问题。你可以选择手动删掉,或者把dir.txt这个文件存到其他地方去,或者,不要和你需要的文件具有相同的后缀也行,比如:dir /b *.txte:\dir.txt??(假设当前目录是e:\test) ? ? 如果省略了第二步中的转到当前目录的话,就需要在dir命令后输入完整的路径了,而且新生成的文件也要选择有权限建立新文件的地方存放,比如你在c:\users目录下输入:dir /b e:\test\*.txte:\dir.txt,这个命令和上面先转到e:\test目录下的效果是一样的。 ? ? 现在你是不是比较好奇,/b 是干嘛的,其实就是只列出文件名,不要其他的附件信息,比如创建时间,文件大小等等这些对于我们批处理无关的信息。 ? ? 如果你想包含某个目录下的子目录,那么,就可以这样写: Dir /b/s filternewfile ? ? /s就表示包含子目录,但是,这样会有一个问题,那就是,批处理的时候必须获得正确的路径才能操作,这样得到的子目录里面的文件不会有任何标志说他是来自子目录的,因此fortran处理的时候就无法判断了,所以,如果包含了子目录,那么请用下面的命令: Dir /a-d/b/s filternewfile ? ? 现在去看看新生成的文件吧,怎么样,很惊喜吧! ? ? 懂了这个方法,下面一部分的第一个方法对你来说就是小菜一碟啦。 ? ? 如果你使用的win7(或vista)系统,而且无法正常使用CVF编译器的话,那么第一部分到这里就算结束啦,除非,你会在其他fortran编译器中调用WIN32
显示全部
相似文档