Fortran 正在修剪目录路径的字符串
我正在尝试创建文件的完整路径,通过Fortran 正在修剪目录路径的字符串,fortran,Fortran,我正在尝试创建文件的完整路径,通过Read语句在中输入父文件夹: PROGRAM fileTest IMPLICIT NONE Character(LEN=20) :: dirpath,fullpath Write(6,*) 'Enter dir path' Read(*,'(a)') dirpath dirpath=TRIM(dirpath) fullpath=dirpath//'/file.abc' print*,fullpath END PROGRAM
Read
语句在中输入父文件夹:
PROGRAM fileTest
IMPLICIT NONE
Character(LEN=20) :: dirpath,fullpath
Write(6,*) 'Enter dir path'
Read(*,'(a)') dirpath
dirpath=TRIM(dirpath)
fullpath=dirpath//'/file.abc'
print*,fullpath
END PROGRAM fileTest
使用gfortran,代码可以编译,但是输入/home/chris
会导致最终的print语句仍然给出
/home/chris /file.abc
(请注意空格中的9个字符)
我怎样才能摆脱虚假的空格 之所以发生这种情况,是因为
dirpath
仍然是一个字符(len=20)
变量,因此其内容在dirpath=TRIM(dirpath)
之后再次填充空格。您必须按照以下方式进行修剪:
fullpath = trim(dirpath)//'/file.abc'
编辑:作为可分配字符串的演示(请参阅我的注释),如果编译器支持以下功能,您应该能够更满意地处理任意字符串长度:
character(:), allocatable :: fullpath
character(len=some_length) :: buffer
write(6,*) 'Enter dir path'
read(*,'(a)') buffer
fullpath = trim(buffer) // '/file.abc'
应自动分配字符串
fullpath
,以适应右侧的确切长度 谢谢-Fortran不是很直观,来自更现代的语言。。!不幸的是,对于字符串来说尤其如此。较新的F2003自动(重新)分配字符可分配项的功能有所帮助,但在这种情况下,如果您将直接读入(您必须先分配它)。模块iso\u variabling\u string
可能对您有所帮助。它定义了一个可分配的字符串派生类型,重载了现有的字符过程/运算符,还添加了一些特定的I/O过程。这是正确的,但是trim
只会从末尾提取条目-我习惯于使用trim(adjustl(dirpath))从字符串的前面删除条目
@ChrisW将其与C中以null结尾的字符串溢出或与StringBuilder的复杂性进行比较,您不会发现有那么糟糕。