Re: PREG

From: Date: Sun, 09 Dec 2001 12:48:48 +0000
Subject: Re: PREG
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-77148@lists.php.net to get a copy of this message
Hi Matt, first it might be easier to just use split here -- $fields = split("\t",$line); .... I say might because I suspect that the records you have that are converting incorrectly perhaps don't follow the tab convention? ... said another way, I've never seen preg break because the file got over a meg in size;) On Fri, Dec 07, 2001 at 11:50:51PM -0000, Matthew Moreton wrote: > Hi people. I am having some trouble with the PREG functions in php. > > Here's what I am trying to do... > > First of all I am reading in a file which is 1.5mb's in size, it could be many more, going > up to 8mb's, the contents of the file is input to a string. > > The format of the file is as follows... > > # # # "quoted text" "quoted text" # # > > the # represents a number, in the case of the first 3 numbers they are only ever 1 or 2 digits > long. The final two digits can get to be rather big in size, thousands and millions. Each element > is seperated by a tab space and then a carriage return (\r) terminates each record. > > I use preg_match_all to find all the lines that start with 1 and 1 as there first numbers, > typically there will be 25 entries of 1 1. So I am looking for all lines in this format: > > 1 1 # "quoted text" "quoted text" # # > > I have the search pattern figured out, it is as follow: > > > preg_match_all("/($first)\t($second)\t([0-9]{1,2})\t\"([^\"]*)\"\t\"([^\"]*)\"\t([0-9]*)\t([0-9]*)\r/", > $input, $output, PREG_SET_ORDER ); > > When this pattern finds a matching line beginning equal to $first and $second it will put all > the elements of the record into the array $output. $output[0] being the array of the first elements > found, $array[1] being the second line that was matched, and so on. > > This pattern does actually work to some extent. When the filesize is low (100kb) it works > fine, but when I start to get over that filesize it becomes greedy and the $second value doesnt seem > to be taken into account when it searchs. It seems to return everything that equals the following: > > 1 # # "quoted text" "quoted text" # # > > Obviously not what I want. Could this be some sort of overflow problem? I am at a lost end > here, so if anyone could offer some insight as to why it is not functioning correctly I would most > welcome it. Overwise the only solution I can think of is chopping up the input, I dont really want > to go down that path, as it seems like a rather cheap workaround. > > Thanks. > > Matt -- Hank Marquardt <hank@yerpso.net> http://web.yerpso.net GPG Id: 2BB5E60C Fingerprint: D807 61BC FD18 370A AC1D 3EDF 2BF9 8A2D 2BB5 E60C *** Web Development: PHP, MySQL/PgSQL - Network Admin: Debian/FreeBSD *** PHP Instructor - Intnl. Webmasters Assn./HTML Writers Guild *** Beginning PHP -- Starts January 7, 2002 *** See http://www.hwg.org/services/classes

« previous php.general (#77148) next »