So the idea is to open file eg as file of array [1:65536] of char or something similar, seek & read to end of file, then go through the last array converting to strings by finding crlfs correct? Is this the simplest way?  If not any outline code? <br /><br />John<br /><br />On , José Mejuto <joshyfun@gmail.com> wrote:<br />> Hello FPC-Pascal,<br />> <br />> <br />> <br />> Monday, April 11, 2011, 7:55:01 PM, you wrote:<br />> <br />> <br />> <br />> >> The idea is easy, instead reading forward, you read backwards in<br />> <br />> >> blocks of, say, 64 Kb and count lines back. If not enougth lines you<br />> <br />> >> insert another 64 Kb before and so on. Average line is usually less<br />> <br />> >> than 100 bytes, so each 64 Kb are usually more than 600 lines. Read of<br />> <br />> >> 64 Kb usually takes the same time as read any lower amount when the<br />> <br />> >> block is 4096 bytes aligned.<br />> <br />> <br />> <br />> MG> You can not really read backwards. You can use<br />> <br />> MG> something like TFileStream.Seek(-4096,soEnd).<br />> <br />> <br />> <br />> I think that the "read backwards in blocks" already stated that fact,<br />> <br />> but nice annotation.<br />> <br />> <br />> <br />> --<br />> <br />> Best regards,<br />> <br />>  José<br />> <br />> <br />> <br />> _______________________________________________<br />> <br />> fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org<br />> <br />> http://lists.freepascal.org/mailman/listinfo/fpc-pascal<br />> <br />>