File FORTRAN 90如何查找文件夹中的文件数
快速怀疑,我需要读取文件夹中的所有文件,但我不知道有多少文件File FORTRAN 90如何查找文件夹中的文件数,file,fortran,directory,fortran90,File,Fortran,Directory,Fortran90,快速怀疑,我需要读取文件夹中的所有文件,但我不知道有多少文件 我知道如何打开所有文件,只是不知道何时停止,即何时读取所有文件。如果您有生成文件名的特定规则(例如mydata001.dat、mydata002.dat等),那么您可以在每次生成文件名时,使用inquire语句检查文件是否存在。当它第一次不存在时,您可以停止。以下程序说明: program proba implicit none character(len=20) :: buffer logical :: exist
我知道如何打开所有文件,只是不知道何时停止,即何时读取所有文件。如果您有生成文件名的特定规则(例如mydata001.dat、mydata002.dat等),那么您可以在每次生成文件名时,使用
inquire
语句检查文件是否存在。当它第一次不存在时,您可以停止。以下程序说明:
program proba
implicit none
character(len=20) :: buffer
logical :: exist
integer :: ind
ind = 1
fileloop: do
write(buffer,"(A,I3.3,A)") "mydata", ind, ".dat"
inquire(file=buffer, exist=exist)
if (.not. exist) then
write(*,*) "File '", trim(buffer), "' not found, exiting loop"
exit
end if
write(*,*) "File: '", trim(buffer), "' found."
ind = ind + 1
end do fileloop
end program proba
或者,如果无法根据规则生成文件名,您可以使用一些库,这些库可以获取目录中的文件列表。一种可能是my library,您可以通过以下方式对任意目录内容执行此操作:
program test_ls
use filesys_module
type(dirdesc) :: dir
character(:), allocatable :: path
call opendir("./", dir)
path = dir%next_filename()
do while (len(path) > 0)
write(*, "(A)") path
path = dir%next_filename()
end do
end program test_ls
如果您有生成文件名的特定规则(例如mydata001.dat、mydata002.dat等),那么您可以在每次生成文件名时,使用
inquire
语句检查文件是否存在。当它第一次不存在时,您可以停止。以下程序说明:
program proba
implicit none
character(len=20) :: buffer
logical :: exist
integer :: ind
ind = 1
fileloop: do
write(buffer,"(A,I3.3,A)") "mydata", ind, ".dat"
inquire(file=buffer, exist=exist)
if (.not. exist) then
write(*,*) "File '", trim(buffer), "' not found, exiting loop"
exit
end if
write(*,*) "File: '", trim(buffer), "' found."
ind = ind + 1
end do fileloop
end program proba
或者,如果无法根据规则生成文件名,您可以使用一些库,这些库可以获取目录中的文件列表。一种可能是my library,您可以通过以下方式对任意目录内容执行此操作:
program test_ls
use filesys_module
type(dirdesc) :: dir
character(:), allocatable :: path
call opendir("./", dir)
path = dir%next_filename()
do while (len(path) > 0)
write(*, "(A)") path
path = dir%next_filename()
end do
end program test_ls
第二种情况是我所处的位置。我会尝试使用你的图书馆,谢谢。与此同时,我正在寻找另一种解决方案,我正在考虑使用系统(命令)来获取使用linux命令的文件列表,但在确定我拥有的编译器的正确语法时遇到了困难。这将是一种非标准解决方案,因为它是您的编译器提供的语言扩展。Fortran 2008有
execute\u命令行
例程,您的编译器可能已经实现了该例程。但是,即使这样,也无法直接提供文件列表…典型的call system()not execute_命令行也无法返回输出,因此您需要执行一些难看的操作,例如将目录列表定向到临时文件,然后打开并读取该文件。您是对的,乔治,这是我选择的解决方案。让我更好地解释一下,程序必须读取一些文件才能运行,这些文件都是由用户提供的,程序也不知道它的名称或数量。将文件作为参数传递的解决方案是什么?如果你有1000个文件,这是一个好的解决方案吗?第二种情况就是我所处的位置。我会尝试使用你的图书馆,谢谢。与此同时,我正在寻找另一种解决方案,我正在考虑使用系统(命令)来获取使用linux命令的文件列表,但在确定我拥有的编译器的正确语法时遇到了困难。这将是一种非标准解决方案,因为它是您的编译器提供的语言扩展。Fortran 2008有execute\u命令行
例程,您的编译器可能已经实现了该例程。但是,即使这样,也无法直接提供文件列表…典型的call system()not execute_命令行也无法返回输出,因此您需要执行一些难看的操作,例如将目录列表定向到临时文件,然后打开并读取该文件。您是对的,乔治,这是我选择的解决方案。让我更好地解释一下,程序必须读取一些文件才能运行,这些文件都是由用户提供的,程序也不知道它的名称或数量。将文件作为参数传递的解决方案是什么?如果你有1000个文件,这是一个好的解决方案吗?如果你想让一个程序在一堆文件上运行,通常的方法是在运行程序时在命令行上把文件作为参数传递。当然,你的问题变成了如何处理命令行参数。如果你想让一个程序在一堆文件上运行,通常的方法是在运行程序时在命令行上把这些文件作为参数传递。当然,您的问题变成了如何处理命令行参数。。