Do you have long lines? If not try this:

$file = "error_log.txt";
if (($fp = fopen($file,'r+') !== 0)
{
// Increment the 1024 sufficiently to read enough data, fgets
automatically stops at \n
    while ($line = fgets($fp,1024))
    {
        if ($line != "") echo($line."<br>");
    }
}

Alternatively, do you know what the last char or the first char in each
line is? (i.e. an end-of-record or start-of-record identifier)

Try this:
$file = "errors.txt";
$file_size = filesize($file);
$byte_count = 0;
$fp = fopen($file,"r+");
$last_char = "";
while ($byte_count < $file_size)
{
    $chr = "";
    $eol = "";
    $line = $last_char;

    while ($eol == 0)
    {
//Use this for EOR checking, replace the $EOR with your EOL/EOR char)
        if (($chr = fread($fp,1)) === 0 || $chr == $EOR) $eol = 1;
        else $line .= $chr;

/** Use this for SOR checking
        if (($chr = fread($fp,1)) === 0 || $chr == $SOR) $eol = 1;
        else $line .= $chr;
        $last_char = $chr
**/

        $byte_count = $byte_count + 1;
    }
    if (trim($line) != "")
    {
//Do Something
        echo($line."<br>");
    }
}

this will need to be modified if you have a multi-byte EOR/SOR, but
hopefully this will give you a good base.

Matt

On Tue, 2003-12-16 at 08:46, Kim Steinhaug wrote:
> Attached is a little textfile on 4 lines, it will choke afte 1 line
> due to the "\n\n" problem.
> 
> I use this loop to parse it :
> 
> $file    = "error_log.txt";
> if($fp=fopen($file, "r+"))
> {
>  while($line=trim(fgets($fp)))
>   {
>   echo $line . "<br>";
>  }
> 
> }
> 
> -- 
> Kim Steinhaug
> ---------------------------------------------------------------
> There are 10 types of people when it comes to binary numbers:
> those who understand them, and those who don't.
> ---------------------------------------------------------------
> 
> 
> "Kim Steinhaug" <[EMAIL PROTECTED]> wrote in message
> news:[EMAIL PROTECTED]
> > Hello,
> >
> > Thanks for you reply. The first approach works, I succesfully
> > imported 1.903.541 entries into my mySQL database, phew!
> > Problem was that as mentioned I had to "massage" the data
> > beforehand, which with TextPad didnt take to much time but
> > again I love my scripts to be complete and be "standalone".
> >
> > Back to the 2) option, I tried another approach, just to see
> > how far the script woul accually go. There are ~2,1 million lines
> > in the error_log so I would like to see a result for the $i in this
> > range. But this script also chokes.
> >
> > $file    = "error_log";
> > $handle = fopen ($file, "rb");
> > $contents = "";
> > do {
> >    $data = fread($handle, 8192);
> >    if (strlen($data) == 0) {
> >        break;
> >    }
> >    $contents = $data;
> >  $temp = explode("\n",$contents);
> >  $i = $i + count($temp);
> >  if($i%1000==0) // Spit out every 1000 lines count
> >  echo $i . "<br>";
> > } while(true);
> > fclose ($handle);
> > echo $count;
> > exit;
> >
> > Do you have an example, or link to a site discussing the issue, of
> > buffering the data?
> >
> > -- 
> > Kim Steinhaug
> > ---------------------------------------------------------------
> > There are 10 types of people when it comes to binary numbers:
> > those who understand them, and those who don't.
> > ---------------------------------------------------------------
> >
> >
> > "Eugene Lee" <[EMAIL PROTECTED]> wrote in message
> > news:[EMAIL PROTECTED]
> > > On Tue, Dec 16, 2003 at 01:30:14PM +0100, Kim Steinhaug wrote:
> > > :
> > > : I found out that what the script accually does is choke on "\n\n",
> > > : empty lines. I havnt found a way to solve this with the script,
> > > :
> > > : What I do now is use TextPad and just replace all occurencies
> > > : of "\n\n" with "\n-\n" or something and it works all nice. But this
> > > : is a bad way of doing it, since the script still doesnt accually
> work...
> > >
> > > You have two options:
> > >
> > > 1) massage your data beforehand so that your script works properly
> > >
> > > 2) buffer your input lines so that you process them only after you have
> > > read a complete "entry", since one entry may span multiple lines in your
> > > error_log.

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to