Tento comparar dois campos em COBOL depois de usar as funções intrínsecas upper-case e trim.
Quando comparo esses dois campos sem mover o resultado para novos campos, a comparação diz que os campos são iguais, embora não sejam, por exemplo, "Wert1" <> "wert1 x", como no meu exemplo.
Por que a comparação funciona como eu espero quando uso campos, mas não quando uso as funções intrínsecas diretamente?
programa de exemplo:
program-id. tintr.
data division.
working-storage section.
01 ws-feld1 pic x(10).
01 ws-feld2 pic x(10).
01 ws-feld3 pic x(10).
01 ws-feld4 pic x(10).
procedure division.
move "Wert1 " to ws-feld1
move "wert1 x" to ws-feld2
*
display "<" function upper-case(ws-feld1) ">"
display "<" function upper-case(ws-feld2) ">"
*
display "<" function trim(ws-feld1) ">"
display "<" function trim(ws-feld2) ">"
*
display "<" function upper-case
(function trim(ws-feld1)) ">"
display "<" function upper-case
(function trim (ws-feld2)) ">"
* Compare WS-Feld1/WS-Feld2
if ws-feld1 = ws-feld2
then
display " felder1-2 identical"
else
display " felder1-2 not identical"
end-if
* Compare Functions uppercase/Trim
if function upper-case
(function trim(ws-feld1))
=
function upper-case
(function trim(ws-feld2))
then
display " felder1-2/function identical"
else
display " felder1-2/function not identical"
end-if
* moving result of functions into field
move function upper-case
(function trim(ws-feld1))
to ws-feld3
move function upper-case
(function trim(ws-feld2))
to ws-feld4
* Compare WS-Feld3/WS-Feld4
if ws-feld3 = ws-feld4
then
display " felder3-4 identical"
else
display " felder3-4 not identical"
end-if
*
stop run.
*
Este é o resultado:
<WERT1 >
<WERT1 X >
<Wert1>
<wert1 x>
<WERT1>
<WERT1 X>
felder1-2 not identical
felder1-2/function identical
felder3-4 not identical
O que eu não esperava é o resultado "felder1-2/function identical":
Alguma explicação para esse comportamento?