fortran批量文件操作
A文件夹下有文件:
201006270801.dat
201008050809.dat
201009010902.dat
……
要求在B文件夹下找对应文件:
20100801.dat
20100809.dat
20100902.dat
…… 写入新的文件夹
B文件夹中文件个数多于A文件夹个数
由于是气象资料,所以数目很大,fortran中有没有相关文件名的操作可以实现?或者其余哪些编辑器可以实现。 展开
文件名,这个概念在Fortran中其实是字符串。你可以用任何字符串相关的操作和函数来处理它。
比如,你要分别打开 0001.txt , 0002.txt,0003.txt 等等。可以参考这样写:
Character( Len = 4 ) :: cStr
Integer i
Do i = 1 , 3
Write( cStr , '(i4.4)' ) i
Open( 12 , File = cStr )
!//在此读取文件
Close( 12 )
End Do
具体的书写办法,你给的信息量不够。
到底多少个文件,你提前是否知晓?
文件名之间是否有规律可循?
最后,纠正你的一个基本概念错误:
书写代码,是 “编辑器” 的事情。而实现,是编译器的事情。
如果你找不到方法来实现某个功能,找任何编辑器都帮不了你。
希望你理解编辑器和编译器的概念。
举例,201007290801.dat 就是10年7月29到8月1日的一次过程的资料,要把A文件夹下所有文件名日期的最后一天在B中找到,也就是20100801.dat,A中的文件名之间无规律可循,循环是做不来的,只能考虑对文件名的读取把
你现在的问题是两个:
如何在一个文件夹中循环所有没有规律的文件。
如何根据 201007290801.txt 得到 20100801.txt。
第一个问题有多个解决方案。
第二个问题很简单了。cStr = '201007290801.txt' ,那么 c = cStr(1:4) // cStr(9:) 就是 '20100801.txt'
回到第一个问题。
Fortran语法中没有对文件夹循环的规定。你需要使用到一些编译器的扩展功能。
这需要你确定你使用的编译器是否支持以下内容:
system 或 systemqq 函数,windows 下 visual fortran 编译器应该都支持。
GetFileInfoQQ 函数,同上。
Win32 API 函数,也同上。
如果支持这些内容。那么你有以下的解决方案:
用 system 或 systemqq 函数,调用系统命令,windows 下为 dir,把所有文件名写入 txt 文件。然后读取该 txt 文件,获得每个文件的文件名。
用 GetFileInfoQQ 函数,本身就能实现穷举。(我把代码列在下面)
用 Win32 API,FindFirstFile 和 FindNextFile。这用起来会麻烦一些。
如果你需要,我可以为你提供第一种或第二种的代码。(有点长,这里放不下)
2024-09-19 广告
广告 您可能关注的内容 |