![]() ![]() However, that solution was just a little off it seems, unless your CSV only contains one line. I kept running into the same issue Chris Tyler experienced with lewis hcoms co uk's function before realizing that Chris had come up with a solution. Add the whole string, untouched to the array The goal here is to be able to engage in *multiple* delimeter removal passes for all but the last pass, set the third value to "1", and everything should go well.įunction quotesplit( $splitter=',', $s, $restore_quotes=0 ) It's very simple in concept, and thoroughly commented.Īctually, this version is better than the last I submitted. It should also be faster than most of the others I've seen. ![]() This *should* work for any valid CSV string, regardless of what it contains inside its quotes (using RFC 4180). $enclosure, $enclosure, substr ( $data, $last_pos, $length )) : '' Instead, try using a simple stack method: Those of you trying to use split for CSV, it won't always work as expected. $temparray = split($splitter, substr($val, $delimlen, strlen($val)-$delimlen-$delimlen 1 ) ) above), so they need to be stripped off Each string has extraneous delimiters around it (inc the ones we added Add the whole string, untouched to the previous value in the array $getstrings = explode('"', $splitter.$s.$splitter) Adding the delimiter to the ends simplifies First step is to split it up into the bits that are surrounded by quotes Wchris's quotesplit assumes that anything that is quoted must also be a complete delimiter-seperated entry by itself. To demonstrate the real situation I wrote following example: In fact the regular expresion "" contains 4 bytes (4 non-unicode characters). UTF-8 charset codes some characters (like the " " character) into two bytes. When I use char the split function ad an empty string between "2" and "12". While(list($iarg, $ival) = each($temparray))ītw this fn checks if $now if between $fromdate and $todate $temparray = split($splitter, substr($val, $delimlen, strlen($val)-$delimlen-$delimlen ) ) Each string has extraneous delimiters around it (inc the ones we added above), so they need to be stripped off Break up the string according to the delimiter character Add the whole string, untouched to the result array. While (list($arg, $val) = each($getstrings)) $instring toggles so we know if we are in a quoted string or not $getstrings = split('\"', $splitter.$s.$splitter) Adding the delimiter to the ends simplifies the logic further down First step is to split it up into the bits that are surrounded by quotes and the bits that aren't. It seemed to split on a comma even though it was between a pair of quotes. $qstr = substr_replace ( $qstr, '', strrpos ( $qstr, '"' ), 1 ) $qstr = substr_replace ( $qstr, '', strpos ( $qstr, '"' ), 1 ) Remove first and last quotes, then merge pairs of quotes To fix this, I changed the second substr_count to look for an odd number of quotes, as opposed to any quotes at all: In response to the getCSVValues() function posted by justin at cam dot org, my testing indicates that it has a problem with a CSV string like this: Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Context options and parameters Supported Protocols and Wrappers Security Introduction General considerations Installed as CGI binary Installed as an Apache module Session Security Filesystem Security Database Security Error Reporting User Submitted Data Hiding PHP Keeping Current Features HTTP authentication with PHP Cookies Sessions Dealing with XForms Handling file uploads Using remote files Connection handling Persistent Database Connections Command line usage Garbage Collection DTrace Dynamic Tracing Function Reference Affecting PHP's Behaviour Audio Formats Manipulation Authentication Services Command Line Specific Extensions Compression and Archive Extensions Cryptography Extensions Database Extensions Date and Time Related Extensions File System Related Extensions Human Language and Character Encoding Support Image Processing and Generation Mail Related Extensions Mathematical Extensions Non-Text MIME Output Process Control Extensions Other Basic Extensions Other Services Search Engine Extensions Server Specific Extensions Session Extensions Text Processing Variable and Type Related Extensions Web Services Windows Only Extensions XML Manipulation GUI Extensions Keyboard Shortcuts ? This help j Next menu item k Previous menu item g p Previous man page g n Next man page G Scroll to bottom g g Scroll to top g h Goto homepage g s Goto search
0 Comments
Leave a Reply. |