1. Dean Helsley
  2. PowerBuilder
  3. Tuesday, 17 August 2021 17:59 PM UTC

I'm confused by the results of a string comparison.  I only discovered this because it's causing an issue with some legacy code we are migrating for a client from the mainframe.

I thought any non-blank value would be greater than a space, but the minus sign is not.  In the debugger, I added the following watch expressions:

 "a" > " "  (this is true)

 "-" > " "  (this is false)

Is this a bug or expected behavior?  It's causing an issue when running the client's converted code because a loop is exiting when it shouldn't based on that comparison.  I don't know why someone would have a single dash as a key value, but that's what's in the data.  That might be an EBCDIC to ASCII conversion issue which we're also investigating.  Regardless, I would expect a char(45) to be greater than a char(32).

 

Dean Helsley Accepted Answer Pending Moderation
  1. Wednesday, 18 August 2021 15:08 PM UTC
  2. PowerBuilder
  3. # 1

I understand about the encoding, and that did cross my mind, however in a simple PB debugger watch expression, apparently '-' is not greater than a space.  That just seems wrong to me.

Comment
  1. Miguel Leeuwe
  2. Wednesday, 18 August 2021 16:09 PM UTC
Yes I agree. I guess it has something to do on what's preferred when sorting data on a string column / value. (first all the 'funny' characters, then the rest).
  1. Helpful
There are no comments made yet.
Miguel Leeuwe Accepted Answer Pending Moderation
  1. Wednesday, 18 August 2021 03:56 AM UTC
  2. PowerBuilder
  3. # 2

In addition to what John has said, if you convert the char values it will work (cannot be strings):

 

integer li_1, li_2
li_1 = asc('-')
li_2 = asc(' ')
if li_1 > li_2 then
....
end if
Comment
There are no comments made yet.
John Fauss Accepted Answer Pending Moderation
  1. Tuesday, 17 August 2021 19:13 PM UTC
  2. PowerBuilder
  3. # 3

This is not a definitive answer, Dean, but if one of the values being compared is ASCII-encoded ANSI, then this behavior could be due to comparison of Unicode with ANSI. Since v10, PB strings by default are represented using Unicode16LE (16-bit, Little Endian) encoding. If the information being processed is from a file that contains ANSI (ASCII127) and the information is not translated to Unicode, there could very well be comparison issues.

Comment
There are no comments made yet.
  • Page :
  • 1


There are no replies made for this question yet.
However, you are not allowed to reply to this question.
We use cookies which are necessary for the proper functioning of our websites. We also use cookies to analyze our traffic, improve your experience and provide social media features. If you continue to use this site, you consent to our use of cookies.