Ala*_*air 45 string fortran integer
我在Fortran中有一个程序将结果保存到文件中.目前我使用打开文件
OPEN (1, FILE = 'Output.TXT')
Run Code Online (Sandbox Code Playgroud)
不过,我现在想运行一个循环,每次迭代的结果保存到文件'Output1.TXT','Output2.TXT','Output3.TXT',等等.
在Fortran中有一种简单的方法可以从循环计数器构造文件名i吗?
Ste*_*ini 48
你可以写一个单元,但你也可以写一个字符串
program foo
character(len=1024) :: filename
write (filename, "(A5,I2)") "hello", 10
print *, trim(filename)
end program
Run Code Online (Sandbox Code Playgroud)
请注意(这是我正在讨论的第二个技巧),您也可以通过编程方式构建格式字符串.
program foo
character(len=1024) :: filename
character(len=1024) :: format_string
integer :: i
do i=1, 10
if (i < 10) then
format_string = "(A5,I1)"
else
format_string = "(A5,I2)"
endif
write (filename,format_string) "hello", i
print *, trim(filename)
enddo
end program
Run Code Online (Sandbox Code Playgroud)
小智 18
一个更容易的解决方案恕我直言...................
character(len=8) :: fmt ! format descriptor
fmt = '(I5.5)' ! an integer of width 5 with zeros at the left
i1= 59
write (x1,fmt) i1 ! converting integer to string using a 'internal file'
filename='output'//trim(x1)//'.dat'
! ====> filename: output00059.dat
Run Code Online (Sandbox Code Playgroud)
小智 9
那么这是一个简单的函数,它将返回一个整数的左对齐字符串版本:
character(len=20) function str(k)
! "Convert an integer to string."
integer, intent(in) :: k
write (str, *) k
str = adjustl(str)
end function str
Run Code Online (Sandbox Code Playgroud)
这是一个测试代码:
program x
integer :: i
do i=1, 100
open(11, file='Output'//trim(str(i))//'.txt')
write (11, *) i
close (11)
end do
end program x
Run Code Online (Sandbox Code Playgroud)
我已经在SO的其他地方展示了这个(如何在格式说明符语句中使用变量?,而不是完全重复的恕我直言),但我认为将它放在这里是值得的.可以使用该问题的其他答案中的技术来实现简单的功能
function itoa(i) result(res)
character(:),allocatable :: res
integer,intent(in) :: i
character(range(i)+2) :: tmp
write(tmp,'(i0)') i
res = trim(tmp)
end function
Run Code Online (Sandbox Code Playgroud)
你可以使用它而不用担心修剪和左调整而不写一个临时变量:
OPEN(1, FILE = 'Output'//itoa(i)//'.TXT')
Run Code Online (Sandbox Code Playgroud)
由于可分配的字符串,它需要Fortran 2003.
| 归档时间: |
|
| 查看次数: |
124828 次 |
| 最近记录: |