Hello everyone, I often needs to read some streams these days and to get some infos related to the lines returns for example. Because of the CRLF it is a little complicated sometimes. I have an example of code here: | lfShouldBeCounted char count remaining | lfShouldBeCounted := false. remaining := 0. count := 0. stream position: startPos. [ stream position = endPos ] whileFalse: [ "13 is a CR, 10 a LF" (char := stream next asInteger) = 13 ifTrue: [ count := count + 1. remaining := 0. lfShouldBeCounted := false ] ifFalse: [ char = 10 ifTrue: [ lfShouldBeCounted ifTrue: [ count := count + 1. remaining := 0 ] ifFalse: [ lfShouldBeCounted := true ] ] ifFalse: [ remaining := remaining + 1 ] ] ] With this example I know how many lines where passed between the startPos and the endPos in a stream. I also know how many char there is between the last line return and the endPos. I wanted to know if you had a better way to do that? The way need to be as performant than this snippet. I know some people here can produce a snippet more readable and easier to maintain :) -- Cyril Ferlicot https://ferlicot.fr http://www.synectique.eu 2 rue Jacques Prévert 01, 59650 Villeneuve d'ascq France