Hi
I’m just getting back into Xojo after a while, trying to load a log file and display it in a list box with colour coded rows.
I’ve got the log file loaded into an array and can populate the listbox but in the CellBackgroundPaint event am unable to get the value of one of the cells ( INFORMATION, WARNING, ERROR).
In the code below, the debugger shows that the String 'logType 'is showing as INFORMATION, but the integer ‘deleteInteger’ is always coming up as -1, and so the cells never actually get assigned a colour because none of the Cases are greater than -1.
Can anyone see where I’m going wrong.
#Pragma Unused column
If row >= Me.RowCount Then Return False
Var logType As String = me.CellValueAt(row,1)
var deleteInteger as Integer = logType.indexOf("INFORMATION") //variable for debugging only
Select Case true
case logType.indexOf("INFORMATION") >= 0
g.AntiAlias = False
g.DrawingColor = &cb2e89b
g.FillRectangle(0,0, g.Width, g.Height)
case logType.indexOf("INFO") >= 0
g.AntiAlias = False
g.DrawingColor = &cb2e89b
g.FillRectangle(0,0, g.Width, g.Height)
case logType.indexOf("DEBUG") >= 0
g.AntiAlias = False
g.DrawingColor = &cafcced
g.FillRectangle(0,0, g.Width, g.Height)
case logType.indexOf("WARNING") >= 0
g.AntiAlias = False
g.DrawingColor = &ced9f64
g.FillRectangle(0,0, g.Width, g.Height)
case logType.indexOf("ERROR") >= 0
g.AntiAlias = False
g.DrawingColor = &ceb827f
g.FillRectangle(0,0, g.Width, g.Height)
end Select
Return True
thanks in advance
Paul
If LogType truly contains INFORMATION, then both
INFORMATION
and
INFO should be a match
The return type of CelValueAt is String in the docs, but I have seen comparisons between String and Text fail.
As a test, set
Var logType As String = "INFORMATION"
and run your code.
Does that produce the right values?
Maybe check the text encoding? (usually UTF8 by default, but it wouldnt hurt to force it…)
Is the code getting past If row >= Me.RowCount ?
Also, you may as well have
g.AntiAlias = False
g.FillRectangle(0,0, g.Width, g.Height)
once, outside of the select case… (you only need the select to set the color.)
Thanks Jeff
I already tried defining the string manually like you suggested and it does give me the result I’m after.
When I run my code as is, and have a break point just before the select case, the debugger shows logType is INFORMATION.
I have also tried to force the encoding, I do that when I create the array.
Hi Paul,
I do not understan your code, but anyway, you can simplify it removing from the Select structure:
g.AntiAlias = False
g.FillRectangle(0,0, g.Width, g.Height)
and place these lines just before Return True.
And, are you sure you have INFORMATION (as is, and not Information) in your text file ?
Add another variable to hold Me.CellValueAt(row,1) and watch in the debugger what’s in it…
Thanks Emile
Have tried that and it definitely shows as INFORMATION
What does it show the byte values as in the debugger?
have you tried
case LogType.trim = “INFORMATION”
Hi Jeff
shows as encoding utf-8 length 25
trim didn’t do anything
A 12 letter word shows as length 25?
1 Like
Yeah, think that’s where my issue is, I’ll dig deeper.
Thanks for the help, at least I know where to look now.
cheers Jeff
Do not go too deeper (not to the bottom), you have to go back to breathe.
So, where are you now ?
Best guess: this is a UTF-16 string that was defined as UTF-8 and the extra bytes are nulls between the characters. If it’s anything like that, you should fix it at its source, not in this method.
Change the view in the debugger to HEX. See what those 25 chars are. I’m curious.
Thanks for your help everyone, the original file that I was reading was a UTF16LE, changed the encoding of the text input stream and all is working now.
1 Like
Thank you Paul for the update.
Please mark some post as Solution.
1 Like