[Gambas-user] Bug in split() ? (1.0.13)

Eilert eilert-sprachen at ...221...
Wed Jan 18 13:25:38 CET 2006


Benoit Minisini schrieb:

>On Wednesday 18 January 2006 10:45, Eilert wrote:
>  
>
>>I am not quite sure, folks, but this seems to be a bug in the Split()
>>function. Or didn't I understand how to use it? Anyway:
>>
>>In my program, there are strings from a file indicating where and how
>>certain input elements of an input mask should appear. For example,
>>there is a "list" element (ComboBox) which has to display some items for
>>the user to click on.
>>
>>This is what those strings look like:
>>
>>    item= mask:'*rau', opt:nocase, insert:'Frau', display:'weiblich'
>>    item= mask:'*err', opt:nocase, insert:'Herr', display:'männlich'
>>
>>This means, if you find "*rau", case-insensitive, display "weiblich". If
>>chosen by the user, insert "Frau" into the field.
>>
>>Now, this function was meant to pick out the "display" command from the
>>string. I inserted a message.info, because it shows what goes wrong:
>>
>>RIVATE FUNCTION MaskeLstDisplay(lst AS String) AS String
>>DIM lOpt AS NEW String[]
>>DIM lCom AS NEW String[]
>>DIM i AS Integer
>>DIM x$ AS String
>>
>>
>>  lOpt = Split(lst, ",", "'") 'String nach Optionen aufteilen (Kommas)
>>
>>
>>  'Kommando "display" suchen:
>>  FOR i = 0 TO lOpt.Count - 1
>>    lCom = Split(lOpt[i], ":", "'")
>>message.Info(lCom[0] & "--" & lCom[1])
>>    IF String.LCase(Trim$(lCom[0])) = "display" THEN
>>      x$ = Trim$(lCom[1])
>>      IF String.Left(x$, 1) = "'" THEN x$ = String.Mid(x$, 2)
>>      IF String.Right(x$, 1) = "'" THEN x$ = String.Left(x$,
>>String.Len(x$) - 1)
>>      RETURN x$
>>    END IF
>>  NEXT
>>
>>
>>  RETURN "?display-Angabe fehlt"
>>
>>END
>>
>>The line above the message.info includes "'" as an escape string. This
>>would mean you could use ":" within the strings without getting trouble.
>>    
>>
>
>The escape character is just checked at the beginning and at the end of a 
>splitted element, i.e., in your case, just before a comma, just after, at the 
>beginning or at the end of string. It allows you to have a comma inside a 
>splitted element.
>
>I think this is not what you expected.
>
>  
>
>>If you feed the function with strings like above, you will see that the
>>last "'" will remain, whilest all other "'" are cut. In my program, this
>>function is called about 6 times, and sometimes (not reproduceably) the
>>Split() keeps garbage from previous calls. I've got "display" commands
>>with shorter strings, and sometimes character garbage and some "m nnl
>>ch" or so will remain at the end of the next string.
>>
>>    
>>
>
>This seems to be a bug. Can you send me a big list of such strings so that I 
>can test your function. Maybe I could get the same bugs as you.
>
>  
>
>>The point is, when you leave the Escape character away, everything runs
>>smoothly, it just leaves the "'" at the strings and doesn't care about
>>them.
>>    
>>
>
>So you don't get the bug if you don't use the escape character? So it will 
>help me to find the bug. I wanted to make a 1.0.14, but I will delay it so 
>that I can fix this bug.
>
>  
>
>>So, is this a bug or am I making a mistake?
>>    
>>
>
>Both! :-)
>
>  
>
>>Thanks for your hints.
>>
>>Rolf
>>
>>    
>>
>
>Regards,
>
>  
>

I just include the few lines relevant for this function, the rest will 
be processed by other functions anyway:

    item= mask:'*rau', opt:nocase, insert:'Frau', display:'weiblich'
    item= mask:'*err', opt:nocase, insert:'Herr', display:'männlich'
    item= mask:'*A05*', opt:nocase, insert:'A05', display:'A 05'
    item= mask:'*B05*', opt:nocase, insert:'B05', display:'B 05'
    item= mask:'*C05*', opt:nocase, insert:'C05', display:'C 05'

Before you use them, better delete the item= at the beginning of each 
line, because they aren't there anymore when the function is called. The 
ä will be replaced by an "ä" before this function, too.

Thanks for your help!

Rolf





More information about the User mailing list