我面临的随机不连贯...在某些情况下,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值时:
修剪(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> 00> 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> 00> 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> 00> 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> 00> 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> 00> 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
so Trim(Tab(i))的修剪为150 null。
我创建了此功能来解决该问题:
逻辑函数ISNULL(var) 隐式没有 角色 *( *):: var 逻辑:: ret ret = iChar(var(1:1)).eq。0 isnull = ret 返回 结束功能
函数TRIM
确实:
7.170
TRIM (STRING)
描述:字符串而不落后空白。
类:变换功能。
参数:STRING
应为字符标量。
结果特征:具有与STRING
相同类型的参数值的字符,并且长度为STRING
的长度少于STRING
中的尾随空白的数量。如果STRING
不包含非蓝色 字符,结果的长度为零。
结果值:结果的值与STRING
相同,除了删除任何尾随空白。
示例:TRIM (" A B ")
具有值" A B"
。来源:Fortran 2008 Standard
您注意到,单词 blank 在此定义中出现了很多,并且代表了相应字符集中的空白。
我的怀疑是您正在处理来自具有CRLF线终止的DOS-Box的数据。或字符串末尾的任何其他无法打印的字符。您可以通过打印字符串的每个字符来验证这一点,并且是对应的ASCII编号。
例如,如果您的字符串为str
:
do i=1,len(str)
print *, ichar(str(i:i)), ">"//str(i:i)//"<"
done
whitespace字符应该具有值32。如果您有不同的值,则可以在这里查看:http://www.asciatible.com/