Thank you for the idea Phil, but I'd like the same code to work both on OSX and Windows. I don't like calling OS commands, either (my fault, I know...)
2014-11-17 11:30 GMT+01:00 p...@highoctane.be <p...@highoctane.be>: > I do not know which OS you are on. > > But I have solved a similar problem by calling tail -5 through OSProcess > on Linux for a quick fix. > > tac file can also help to read a file in reverse. > > Phil > > On Mon, Nov 17, 2014 at 10:20 AM, José Comesaña <jose.comes...@gmail.com> > wrote: > >> 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 >>> >>> >>> >> >