469,292 Members | 1,310 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,292 developers. It's quick & easy.

How do i read a file line by line backwards?

Can anybody help.

I need to read a txt file backwords line by line. Can anybody help me do
this.

Thanks
Chris
Jul 17 '05 #1
8 16727
Chris <cm*@raindrop.co.uk> wrote:
I need to read a txt file backwords line by line. Can anybody help me do
this.


Use file(). It returns an array which you can read from count($array)-1
to 0.

--

Daniel Tryba

Jul 17 '05 #2
On Mon, 05 Jan 2004 15:17:47 -0800, Chris wrote:
Can anybody help.

I need to read a txt file backwords line by line. Can anybody help me do
this.

Thanks
Chris

$foo = @file('foo.php');
$bar = array_reverse($foo);

foreach ($foo as $baz) {
print $baz . "\n";
}
HTH =)

Regards,

Ian

--
Ian.H [Design & Development]
digiServ Network - Web solutions
www.digiserv.net | irc.digiserv.net | forum.digiserv.net
Programming, Web design, development & hosting.

Jul 17 '05 #3
You can also use function *array_reverse* to reverse the array, after
calling *file*. But dont do this unnecessarily as it will put extra
load on the server.

You can even reverse a string using following code:

$str = implode("",array_reverse(preg_split('//', $str)));

--
Rahul

Daniel Tryba <ne****************@canopus.nl> wrote in message news:<bt**********@news.tue.nl>...
Chris <cm*@raindrop.co.uk> wrote:
I need to read a txt file backwords line by line. Can anybody help me do
this.


Use file(). It returns an array which you can read from count($array)-1
to 0.

Jul 17 '05 #4
jn

"Ian.H" <ia*@WINDOZEdigiserv.net> wrote in message
news:pa***************************@hybris.digiserv .net...
On Mon, 05 Jan 2004 15:17:47 -0800, Chris wrote:
Can anybody help.

I need to read a txt file backwords line by line. Can anybody help me do
this.

Thanks
Chris

$foo = @file('foo.php');
$bar = array_reverse($foo);

foreach ($foo as $baz) {
print $baz . "\n";
}
HTH =)

Regards,

Ian

--
Ian.H [Design & Development]
digiServ Network - Web solutions
www.digiserv.net | irc.digiserv.net | forum.digiserv.net
Programming, Web design, development & hosting.


That should be:

foreach ($bar as $baz) {
print $baz . "\n";
}

Jul 17 '05 #5
Daniel Tryba <ne****************@canopus.nl> wrote in message news:<bt**********@news.tue.nl>...
Chris <cm*@raindrop.co.uk> wrote:
I need to read a txt file backwords line by line. Can anybody help me do
this.


Use file(). It returns an array which you can read from count($array)-1
to 0.


Is their a way of doing this without reading the whole file into
memory as it could potentially be a large file?

thanks
chris
Jul 17 '05 #6
Chris wrote:

Daniel Tryba <ne****************@canopus.nl> wrote in message news:<bt**********@news.tue.nl>...
Chris <cm*@raindrop.co.uk> wrote:
I need to read a txt file backwords line by line. Can anybody help me do
this.


Use file(). It returns an array which you can read from count($array)-1
to 0.


Is their a way of doing this without reading the whole file into
memory as it could potentially be a large file?


In this case, I would recommend something like the following (ghastly) mix of
code and pseudocode :o). I haven't tested it, so there may be a logic error -
don't treat is as gospel. Basically, you open the file and read it chunk by
chunk backwards (that is, the chunks start at the end and move towards the
beginning of the file. Each individual chunk is read forwards). Make each
chunk into an array. Unless you're reading from the beginning of the file,
remember how big the first record is and then kill it, as it's likely
incomplete. During the next loop, adjust your fseek to compensate for each
previous killed record. Then read through the array backwards and do whatever
it is you want to the records. Remember, it's good practice not to loop through
the whole thing if you don't need to. In other words, use "break" and
"continue" as appropriate.

fopen(); //open file
$intChunkSize = 5 * 1024; //set chunk size to bigger than max record size
$intAdjustment = 0;
$intSeekTo = 1;

loop //loop while $intSeekTo > 0
$intSeekTo = filesize() - ($intChunkSize * $intLoopNumber) + $intAdjustment;
if ($intSeekTo < 0){
$intChunkSize += intSeekTo; //adjust your chunk size to bytes remaining
$intSeekTo = 0;
}

fseek(); //fseek to $intSeekTo
fread(); //read $intChunkSize bytes from file

$arrFoo = split("\n", fread()); //read up to intChunksize bytes into array
$intAdjustment += strlen($arrFoo[0]); //remember how much to adjust
if ($intSeekTo > 0) //if this isn't the last loop
array_shift($arrFoo); //kill the first (incomplete) record
for ($i = count($arrFoo)-1; $i >= 0; ++$i) //loop through array backwards
//do your thing

end loop

Regards,
Shawn
--
Shawn Wilson
sh***@glassgiant.com
http://www.glassgiant.com
Jul 17 '05 #7
"Chris" <cm*@raindrop.co.uk> wrote in message
news:bb**************************@posting.google.c om...
Can anybody help.

I need to read a txt file backwords line by line. Can anybody help me do
this.

Thanks
Chris

This is just a thought,

why not just open the file, seek to the end, read byte by byte backwords,
untill you find a \n

then what you have read in is a line,

repeat for next line,

repeat for next line,

repeat for next line,

--
Mike Bradley
http://www.gzentools.com -- free online php tools
Jul 17 '05 #8
Chris wrote:
Can anybody help.

I need to read a txt file backwords line by line. Can anybody help me do
this.


Are you on Linux? If so:

$file = popen("tac $filename",'r');
while ($line = fgets($file,8096) {
echo $line;
}

tac == cat backwards (lame joke but there you go)

Jul 17 '05 #9

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

40 posts views Thread by Abby | last post: by
3 posts views Thread by juli jul | last post: by
35 posts views Thread by RyanS09 | last post: by
11 posts views Thread by jo3c | last post: by
3 posts views Thread by George | last post: by
reply views Thread by leeamiin | last post: by
1 post views Thread by CARIGAR | last post: by
reply views Thread by zhoujie | last post: by
reply views Thread by harlem98 | last post: by
1 post views Thread by Geralt96 | last post: by
reply views Thread by harlem98 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.