From: Richard Lee <[EMAIL PROTECTED]> > Mr. Shawn H. Corey wrote: > > It still has to go through the entire file and mark the offsets to the > > start of every line. > > > > The best way to do this is just to bite the bullet and do it. > > There is no way to read say last 10 MB of the file or something? It's > very surprising why no such thing exists..
It's a very different thing to read the last 10MB and to read the last 100000 lines. You know how many bytes are 10MB so you can seek() just to that position easily, you don't know (unless the lines are of the same and known length) how many bytes are 100000 lines. So if you'd really need to process the last 100000 lines in order, you'd first have to find the 100000th newline character counting from the end ... that is seek() say 1MB before the end, read 1MB, count the newlines, seek additional 1MB, read 1MB, count the newlines and repeat this till you find the chunk containing the 100000th newline, then find its position, seek() to that position (keep in mind that you have to read the file as binary, if you let Perl convert newlines or something like that, then the positions will not match!) and start reading. Any chance you instead want to start reading where you left off last time? In that case you want to remember the position in the file using tell() whenever you finish processing it, store it somewhere and next time start by seek()ing to that position. Jenda ===== [EMAIL PROTECTED] === http://Jenda.Krynicky.cz ===== When it comes to wine, women and song, wizards are allowed to get drunk and croon as much as they like. -- Terry Pratchett in Sourcery -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/