我面临一个随机的不连贯......在某些情况下,trim(“”)==“”返回false。
我做了这样的事情(所以使用类型的一种连接函数)当然这个代码有点乱,可以做很多简化但是因为这个修剪问题我这样做是为了确保没有任何东西搞乱:
character*150 :: tab(5)
character*150 :: var
character*50 :: a
character*50 :: b
character*50 :: c
character*50 :: d
a= '' ! comes from a type nameType%pref
b= '' ! parameter
c= '' ! comes from a type nameType%suf
d= 'deviceName' ! parameter
if (trim(d) .ne. '') then
var = d
else
if (trim(c) .ne. '' .and. (trim(a) .ne. '' .or. trim(b) .ne. ''))then
var = trim(a)//trim(c)//trim(b)
else
var = ''
end if
end if
var = trim(a)//trim(b)//trim(c)
tab(1) = var
if (trim(tab(1)) .eq. '') then
print*, ("hi")
end if
这是此函数末尾的退出:
trim(var) :
len_trim(var) : 0
trim(var) == " : T
这段代码有时候工作,有时候不行......(我的意思是我有其他空变量,我只是面对一些变量这个问题)我认为空格字符是加密的,因为在调试模式下我有随机值,如“pÏ” ...
这是错误打印的退出,当我要求ASCII值时:
trim(var) : len_trim(var) : 150 trim(var) == " : F ichar(var(j:j)), ">"//var(j:j)//"<" 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 > 0 >
因此trim(tab(i))正在修剪150 NULL。
我创建了这个函数来解决这个问题:
logical function isNULL(var) implicit none Character *(*) :: var logical :: ret ret = ichar(var(1:1)) .eq. 0 isNULL = ret return end function
函数TRIM
做:
7.170
TRIM (STRING)
描述:没有尾随空格的字符串。 类:转换函数。 争论:STRING
应该是一个角色标量。 结果特征:具有与STRING
相同类型参数值的字符,其长度为STRING
的长度减去STRING
中的尾随空白的数量。如果STRING
不包含非空字符,则结果为零长度。 结果值:结果的值与STRING
相同,除了删除任何尾随空格。 示例:TRIM (" A B ")
的值为" A B"
。
正如您所注意到的,空白一词在此定义中出现很多,并在相应的字符集中表示空白区域。
我怀疑你正在处理来自具有CRLF线路终端的DOS盒子的数据。或者字符串末尾的任何其他不可打印的字符。您可以通过打印字符串的每个字符及其相应的ASCII编号来验证这一点。
例如,如果你的字符串是str
:
do i=1,len(str)
print *, ichar(str(i:i)), ">"//str(i:i)//"<"
done
空格字符应该具有值32.如果你有不同的值,你可以看看这里:http://www.asciitable.com/