String 正在打开名称包含实数的目录

String 正在打开名称包含实数的目录,string,floating-point,fortran,String,Floating Point,Fortran,在Fortran中,是否可以打开多个文件夹,读取其中的文件(每个文件夹中只有一个文件,并且每个文件夹都有相同的文件名),然后将数据(数组2x40数据,但只取第二列)写入单个文件 我试着编写一个程序,使文件夹名称为实数(0,0.05,…,10),将其更改为字符并在每个循环中打开,如下所述,但似乎打开文件夹和文件的行不起作用 program results implicit none integer, parameter :: nx = 100, ny = 40, lmax = 2, mmax=40

在Fortran中,是否可以打开多个文件夹,读取其中的文件(每个文件夹中只有一个文件,并且每个文件夹都有相同的文件名),然后将数据(数组2x40数据,但只取第二列)写入单个文件

我试着编写一个程序,使文件夹名称为实数(0,0.05,…,10),将其更改为字符并在每个循环中打开,如下所述,但似乎打开文件夹和文件的行不起作用

program results
implicit none
integer, parameter :: nx = 100, ny = 40, lmax = 2, mmax=40
character(*), parameter :: fileplace = "/home/sampleDict"
character(*) :: string
integer :: i=0, k=0
integer :: l,m
real(8) :: fn=0
integer, dimension(lmax, mmax) :: A
open (unit=200,file='elevation.csv', status='unknown')
do i=i+1,nx
 fn=fn+0.05
 write(string,*) fn
 open(unit=i,file=fileplace//trim(adjustl(string))//'data.csv',status='old')
 read(i,*) ((A(l,m),l=1,lmax),m=1,mmax)
 write(200,*) A(2,m)
enddo
end program

当然有可能。永远不要使用它“不起作用”。这毫无帮助。告诉我们发生了什么。撞车?错误的结果?为什么错了?有消息吗?可能您需要一种特定的格式,而不是
write(string,*)
中的
*
,但我们确实需要更多的细节。告诉我们目录(文件夹)的确切名称。也可以看到这个,但这是关于整数的。在右边的链接部分,它可能有一个reals示例。我建议您将文件名字符串写入控制台。您会发现,由于浮点表示问题,文件名与预期不同。您的名称中似乎也没有任何目录分隔符。0.05不能准确地用二进制表示,因此您会得到5.0000000745058060E-002和0.1000000149011612这样的数字。一个快速而肮脏的解决方法(如果文件的数量仅为21)可能是创建一个包含“0”、“0.05”、“0.1”、“1”等字符串的字符数组,并在do循环中使用它们(例如,打开(…,file=fileplace//trim)(tags(i))/“data.csv”,…)。另一种解决方法是从包含一系列值的外部文件中读取此类标记。(后一个文件可以手动或通过任何其他工具准备。)当然这是可能的。永远不要使用它“不起作用”。这根本没有帮助。告诉我们发生了什么。崩溃?错误的结果?为什么出错?有消息吗?可能您需要一种特定的格式,而不是
write(string,*)
中的
*
,但我们确实需要更多详细信息。告诉我们目录(文件夹)的确切名称。也可以看到这一点,但这是关于整数的。在右侧的链接部分中,可能有一个reals示例。我建议您将文件名字符串写入控制台。您会发现由于浮点表示问题,您的文件名与预期不符。您的名称中似乎也没有任何目录分隔符。当然.0.05无法准确地用二进制表示,因此您会得到5.0000000745058060E-002和0.1000000149011612这样的数字。一个快速而肮脏的解决方法(如果文件的数量仅为21)可能是创建一个包含“0”、“0.05”、“0.1”、…、“1”等字符串的字符数组,并在do循环中使用它们(例如,打开)(…,file=fileplace//trim(tags(i))/“data.csv”,…)。另一种解决方法是从包含一系列值的外部文件中读取此类标记。(后一个文件可以手动或通过任何其他工具准备。)