We figured out today that

'blabla1230' squeezeOutNumber ==> 123

But it should be 1230.

So after multiple attempts to debug this expression (with strange behaviors), 
we discovered that it's while parsing the reversed version of the string that 
it fails[1]
Indeed, when reversed, the trailing 0 become a leading 0, and is ignored (which 
in our case is wrong).

So we removed this part, and all the tests are green again.
But still we were wondering if the piece of code is needed somewhere or not ?


Thanks in advance,
Ben and Cami



[1]:squeezeNumberOutOfString: stringOrStream onError: errorBlock
        "Try and find a number in this string. First, look if the string 
        starts with a number. Then, see if it ends with a number. Then,
        remove a character from the front and see if the remaining 
        string makes a number. Repeat the process until no characters
        are left or the number has been found. As soon as a number is
        found, it is returned. Otherwise, the method fails."
        
        | string try |
        
        stringOrStream isEmpty ifTrue: errorBlock.
        
        (self parse: stringOrStream onError: [nil])
                ifNotNilDo: [:result | ^ result ].
                
        (self parse: stringOrStream asString copy reversed onError: [nil])
                ifNotNilDo: [:result | ^ result asString reversed asNumber].
        
        string := stringOrStream.
        "We do the loop n-1 times because at the n-th iteration, string is 
empty"
        (stringOrStream size -1) timesRepeat: [
                string := string allButFirst.
                (self parse: string onError: [ nil ])
                        ifNotNilDo: [ :result| ^ result ].].
                
        ^ errorBlock value

Reply via email to