Re: <? -- File Total -- ?>

From: Date: Mon, 19 Feb 2001 22:18:03 +0000
Subject: Re: <? -- File Total -- ?>
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-40653@lists.php.net to get a copy of this message
Reading 1 character at a time is killing you. I don't know how large is quite large, but this should be way faster: <?php function total($filename){ $total = 0; $file = fopen($filename, 'r') or die("Could not open $filename"); while (!feof($file)){ $line = fgets($file, 1000000); $fields = explode('|', $line); # The array is 0-based, so 14 *should* be 15th field... $total += $fields[14]; } fclose($file); } ?> You may still need to add a set_time_limit(30) in the loop if the file is truly massive... -- Visit the Zend Store at http://www.zend.com/store/ Wanna help me out? Like Music? Buy a CD: http://l-i-e.com/artists.htm Volunteer a little time: http://chatmusic.com/volunteer.htm ----- Original Message ----- From: "Abe Asghar" <abe@fish.tm> Newsgroups: php.general Sent: Monday, February 19, 2001 9:21 AM Subject: [PHP] <? -- File Total -- ?> Hi, I am trying to get a total value of orders from a file. The file has various fields separated by '|'. It is the 15th field I am trying to total. At the moment I am trying to search each character but it times out as the file is quite large - is there a more efficient way of doing this. Thanks - Here is the script: <?php function total($filename) { $totalfile=16; $total=0; $vartemp=""; $counterbeforeend=0; $counter=0; if(!$file=fopen($filename,"r")) { echo"Could not open the file named '$filename'"; } else while((!feof($file))&&($total<1000)) { $char=fgetc($file); if(strcmp($char,"|")==0) $counter++; if($counter==($totalfile+1)) { $vartemp=$vartemp.$char; if((strcmp($char,".")==0)||($passed==1)) { $counterbeforeend++; $passed=1; } if($counterbeforeend==3) { $total=$total+$vartemp; $passed=0; $counter=0; $counterbeforeend=0; $vartemp=""; echo"$total<BR>\n"; } } else if($counter==$totalfile) { $counter++; } } } return($total); } ?> <HTML> <BODY> <? $total1=total("G&V_orderslist.txt"); echo"$total1"; ?> </BODY> </HTML>

« previous php.general (#40653) next »