Thank you Sven.

I an trying to read a veeeery long log file, and extract the last 5
messages for the user to see them. Reading the whole file from the
beginning is too expensive. So maybe I could try reading backwards from the
end using binary mode and look for a lf... I have to think about it a
little bit, and study your proposal, of course.





2014-11-17 9:26 GMT+01:00 Sven Van Caekenberghe <s...@stfx.eu>:

> Hi José,
>
> > On 17 Nov 2014, at 02:06, José Comesaña <jose.comes...@gmail.com> wrote:
> >
> > There is an annoying error in MultiByteFileStream, reading back when you
> have a unicode character. It is also the cause of some FileOut errors. Your
> can reproduce it this way:
> >
> > testString := 'abcdé'.
> > filename := 'test.txt'.
> > filename asFileReference ensureDelete.
> > filename asFileReference
> >               writeStreamDo: [ :stream |
> >                       stream
> >                               nextPutAll: testString ].
> >
> > f := 'test.txt' asFileReference readStream.
> >
> > f setToEnd.
> >
> > f skip: -1.
> >
> > f peek.
> >
> >
> > Any ideas how to solve it? Avoiding reading back is not an option ;).
> Maybe making skip to go back one more byte to check if there is a unicode
> character around?.
> >
> > Thanks a lot.
>
> This is a known problem/issue/limitation of MultiByteFileStream and the
> TextConverters.
>
> The more modern/logical ZnCharacterEncoders can do this reliably (provided
> the underlying stream can itself move backwards and the current position is
> between whole characters).
>
> 'test.txt' asFileReference readStreamDo: [ :in |
>   in binary; setToEnd.
>   ZnUTF8Encoder new backOnStream: in; nextFromStream: in ]
>
> IMHO, the ability to move backwards and to play with positions without
> restrictions on streams only makes sense with in-memory streams, not with
> file or network streams. It plays badly with buffering too.
>
> I know this doesn't solve your issue but I hope it gives you a better idea
> of the situation.
>
> Where exactly do you have this issue ?
>
> Sven
>
>
>

Reply via email to