我正面临随机不一致性...在某些情况下,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
答案 0 :(得分:1)
函数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/