Я сталкиваюсь со случайной несогласованностью ... В некоторых случаях 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
Этот код иногда работает, а иногда нет ... (я имею в виду, у меня есть другие пустые переменные, и я сталкиваюсь с этой проблемой только с некоторыми переменными) Я думаю, что символ пробела зашифрован, потому что в режиме отладки у меня есть случайные значения, такие как "пи" ...
Вот выход при печати ошибки и когда я запрашиваю значение 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