<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: comma code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sun, 27 Jul 2008 03:22:29 GMT</pubDate>
    <description>DZone Snippets: comma code</description>
    <item>
      <title>CSV parsing regex</title>
      <link>http://snippets.dzone.com/posts/show/4430</link>
      <description>The regular expression is taken from Raimond Brookman, &lt;a href="http://blogs.infosupport.com/raimondb/archive/2005/04/27/199.aspx"&gt;Regex fun with CSV&lt;/a&gt;.&lt;br /&gt;For a good general CSV overview see &lt;a href="http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm"&gt;The Comma Separated Value (CSV) File Format&lt;/a&gt;.&lt;br /&gt;A complete Ruby CSV parsing library is &lt;a href="http://fastercsv.rubyforge.org"&gt;FasterCSV&lt;/a&gt; (sudo gem install fastercsv).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;csv_data = &lt;&lt;-EOS&lt;br /&gt;&lt;br /&gt;fname,lname,age,salary&lt;br /&gt;nancy,davolio,33,$30000&lt;br /&gt;erin,borakova,28,$25250&lt;br /&gt;tony,raphael,35,$28700&lt;br /&gt;&lt;br /&gt;"Date","Pupil","Grade"&lt;br /&gt;"25 May","Bloggs, Fred","C"&lt;br /&gt;"25 May","Doe, Jane","B"&lt;br /&gt;"15 July","Bloggs, Fred","D"&lt;br /&gt;&lt;br /&gt;123456789,"Carr, Lisa",100000.00&lt;br /&gt;444556666,"Barr, Clark",87000.00&lt;br /&gt;777227878,"Parr, Jack",123000.00&lt;br /&gt;998877665,"Charr, Lee",123000.00&lt;br /&gt;&lt;br /&gt;Conference room 1, "John,  &lt;br /&gt;Please bring the M. Mathers file for review  &lt;br /&gt;-J.L.&lt;br /&gt;"&lt;br /&gt;10/18/2002,...&lt;br /&gt;&lt;br /&gt;John,Doe,120 jefferson st.,Riverside, NJ, 08075&lt;br /&gt;Jack,McGinnis,220 hobo Av.,Phila, PA,09119&lt;br /&gt;"John ""Da Man""",Repici,120 Jefferson St.,Riverside, NJ,08075&lt;br /&gt;Stephen,Tyler,"7452 Terrace ""At the Plaza"" road",SomeTown,SD, 91234&lt;br /&gt;,Blankman,,SomeTown, SD, 00298&lt;br /&gt;"Joan ""the bone"", Anne",Jet,"9th, at Terrace plc",Desert City,CO,00123&lt;br /&gt;&lt;br /&gt;XXXX,D,3-May-02,83.01,83.58,71.13,78.04,9645300&lt;br /&gt;XXXX,D,2-May-02,82.47,85.76,82.05,83.84,7210000,&lt;br /&gt;XXXX,D,1-May-02,86.80,90.83,81.74,85.50,14253300&lt;br /&gt;&lt;br /&gt;"1997",car model,E350&lt;br /&gt;1997,car model,E350,"  Super luxurious truck    "&lt;br /&gt;1997,car model,E350,"Go get one now&lt;br /&gt;they are going fast"&lt;br /&gt;1997,car model,E350,"Super ""luxurious"" truck"&lt;br /&gt;1997,car model,E350,"Super, luxurious truck"&lt;br /&gt;&lt;br /&gt;1997,car model,E350,"ac, abs, moon",3000.00&lt;br /&gt;1999, car model,"Venture ""Extended Edition""",,4900.00,&lt;br /&gt;1996, car model,Old Car,"BEYOND REPAIR!&lt;br /&gt;air, moon roof, loaded",4799.00&lt;br /&gt;&lt;br /&gt;This,is,a test,CSV, file," from ""http://lorance.freeshell.org/csv/test.csv""."&lt;br /&gt;It contains,"quoted text",and,numbers 1234,5678&lt;br /&gt;It also has,"quoted text with an embedded quote""&lt;- right there"&lt;br /&gt;Then there are a few,,blank fields like these here -&gt;,,,&lt;br /&gt;A quoted blank field,"",&lt;- there.&lt;br /&gt;A quoted blank field with newline,"\n",&lt;- there.&lt;br /&gt;This next one causes an error if newline handling is turned off.&lt;br /&gt;"There is a newline here -&gt;&lt;br /&gt;&lt;- and it should be processed correctly."&lt;br /&gt;ABCD&lt;br /&gt;"And here,,, is an""Error - no"&lt;br /&gt;"And here,,, is an"Error - yes&lt;br /&gt;"And here,,, is an",Error - no&lt;br /&gt;&lt;br /&gt;1,2,3&lt;br /&gt;ab,"c,d","e""f", "g"",""","h&lt;br /&gt;jk",kl&lt;br /&gt;&lt;br /&gt;"aaa","bbb","ccc"&lt;br /&gt;zzz,yyy,xxx&lt;br /&gt;"aaa","b&lt;br /&gt;bb","ccc"&lt;br /&gt;zzz,yyy,xxx&lt;br /&gt;&lt;br /&gt;"aaa","b""bb","ccc"&lt;br /&gt;&lt;br /&gt;EOS&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;csv_data.split(/(,|\r\n|\n|\r)(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/m).each do |csv|&lt;br /&gt;#csv_data.split(/[,\n\r]+(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/m).each do |csv|&lt;br /&gt;&lt;br /&gt;   next if csv.empty?&lt;br /&gt;&lt;br /&gt;   csv = csv.strip&lt;br /&gt;&lt;br /&gt;   if csv =~ /\A(".*[^"]|[^"].*")\z/m then     # examples: csv =&gt; "ab\nc"def  or  abc"de\nf"&lt;br /&gt;       puts&lt;br /&gt;       puts "Error:" &lt;br /&gt;       p csv &lt;br /&gt;       puts csv[/\A./mu], csv[/.\z/mu] &lt;br /&gt;       #puts csv[0..0], csv[-1..-1] &lt;br /&gt;       puts&lt;br /&gt;       next&lt;br /&gt;   end&lt;br /&gt;&lt;br /&gt;   if csv =~ /\A".*"\z/m then csv.gsub!(/\A"(.*)"\z/m, '\1') end  # remove double-quotes at string beginning &amp; end&lt;br /&gt;   if csv =~ /""/m then csv.gsub!(/""/m, '"') end                 # remove a double-quote from double double-quotes&lt;br /&gt;&lt;br /&gt;   p csv&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;</description>
      <pubDate>Sat, 18 Aug 2007 17:17:23 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4430</guid>
      <author>ntk ()</author>
    </item>
    <item>
      <title>CSV Parser / Writer for PHP</title>
      <link>http://snippets.dzone.com/posts/show/3128</link>
      <description>CSV Parser / Writer&lt;br /&gt;&lt;br /&gt;Example A:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;//cell separator, row separator, value enclosure&lt;br /&gt;$csv = new CSV(';', "\r\n", '"');&lt;br /&gt;&lt;br /&gt;//parse the string content&lt;br /&gt;$csv-&gt;setContent(file_get_contents('data.csv'));&lt;br /&gt;&lt;br /&gt;//returns an array with the CSV data&lt;br /&gt;print_r($csv-&gt;getArray());&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Exemple B:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$csv = new CSV(';', "\r\n", '"');&lt;br /&gt;//sets up the content through an array&lt;br /&gt;$csv-&gt;setArray(&lt;br /&gt;	array(&lt;br /&gt;		array('col"una1', "colu\r\nna2"),&lt;br /&gt;		array('col;una3', 'coluna4')&lt;br /&gt;	)&lt;br /&gt;);&lt;br /&gt;//retorns string with the CSV representation&lt;br /&gt;print $csv-&gt;getContent();&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;//+ Jonas Raoni Soares Silva&lt;br /&gt;//@ http://jsfromhell.com&lt;br /&gt;class CSV{&lt;br /&gt;	var $cellDelimiter;&lt;br /&gt;	var $valueEnclosure;&lt;br /&gt;	var $rowDelimiter;&lt;br /&gt;&lt;br /&gt;	function CSV($cellDelimiter, $rowDelimiter, $valueEnclosure){&lt;br /&gt;		$this-&gt;cellDelimiter = $cellDelimiter;&lt;br /&gt;		$this-&gt;valueEnclosure = $valueEnclosure;&lt;br /&gt;		$this-&gt;rowDelimiter = $rowDelimiter;&lt;br /&gt;		$this-&gt;o = array();&lt;br /&gt;	}&lt;br /&gt;	function getArray(){&lt;br /&gt;		return $this-&gt;o;&lt;br /&gt;	}&lt;br /&gt;	function setArray($o){&lt;br /&gt;		$this-&gt;o = $o;&lt;br /&gt;	}&lt;br /&gt;	function getContent(){&lt;br /&gt;		if(!(($bl = strlen($b = $this-&gt;rowDelimiter)) &amp;&amp; ($dl = strlen($d = $this-&gt;cellDelimiter)) &amp;&amp; ($ql = strlen($q = $this-&gt;valueEnclosure))))&lt;br /&gt;			return '';&lt;br /&gt;		for($o = $this-&gt;o, $i = -1; ++$i &lt; count($o);){&lt;br /&gt;			for($e = 0, $j = -1; ++$j &lt; count($o[$i]);)&lt;br /&gt;				(($e = strpos($o[$i][$j], $q) !== false) || strpos($o[$i][$j], $b) !== false || strpos($o[$i][$j], $d) !== false)&lt;br /&gt;				&amp;&amp; $o[$i][$j] = $q . ($e ? str_replace($q, $q . $q, $o[$i][$j]) : $o[$i][$j]) . $q;&lt;br /&gt;			$o[$i] = implode($d, $o[$i]);&lt;br /&gt;		}&lt;br /&gt;		return implode($b, $o);&lt;br /&gt;	}&lt;br /&gt;	function setContent($s){&lt;br /&gt;		$this-&gt;o = array();&lt;br /&gt;		if(!strlen($s))&lt;br /&gt;			return true;&lt;br /&gt;		if(!(($bl = strlen($b = $this-&gt;rowDelimiter)) &amp;&amp; ($dl = strlen($d = $this-&gt;cellDelimiter)) &amp;&amp; ($ql = strlen($q = $this-&gt;valueEnclosure))))&lt;br /&gt;			return false;&lt;br /&gt;		for($o = array(array('')), $this-&gt;o = &amp;$o, $e = $r = $c = 0, $i = -1, $l = strlen($s); ++$i &lt; $l;){&lt;br /&gt;			if(!$e &amp;&amp; substr($s, $i, $bl) == $b){&lt;br /&gt;				$o[++$r][$c = 0] = '';&lt;br /&gt;				$i += $bl - 1;&lt;br /&gt;			}&lt;br /&gt;			elseif(substr($s, $i, $ql) == $q){&lt;br /&gt;				$e ? (substr($s, $i + $ql, $ql) == $q ?&lt;br /&gt;				$o[$r][$c] .= substr($s, $i += $ql, $ql) : $e = 0)&lt;br /&gt;				: (strlen($o[$r][$c]) == 0 ? $e = 1 : $o[$r][$c] .= substr($s, $i, $ql));&lt;br /&gt;				$i += $ql - 1;&lt;br /&gt;			}&lt;br /&gt;			elseif(!$e &amp;&amp; substr($s, $i, $dl) == $d){&lt;br /&gt;				$o[$r][++$c] = '';&lt;br /&gt;				$i += $dl - 1;&lt;br /&gt;			}&lt;br /&gt;			else&lt;br /&gt;				$o[$r][$c] .= $s[$i];&lt;br /&gt;		}&lt;br /&gt;		return true;&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;?&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 11 Dec 2006 22:36:10 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3128</guid>
      <author>jonasraoni (Jonas Raoni Soares Silva)</author>
    </item>
    <item>
      <title>Adding commas to digits</title>
      <link>http://snippets.dzone.com/posts/show/584</link>
      <description>Copy from Marek Baczynski's code here&lt;br /&gt;http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/439357&lt;br /&gt;&lt;code&gt;&lt;br /&gt;def group(n, sep = ','):&lt;br /&gt;    s = str(n)[::-1]&lt;br /&gt;    groups = []&lt;br /&gt;    i = 0&lt;br /&gt;    while i &lt; len(s):&lt;br /&gt;        groups.append(s[i:i+3])&lt;br /&gt;        i += 3&lt;br /&gt;    return sep.join(groups)[::-1]&lt;br /&gt;&lt;br /&gt;#&gt;&gt;&gt; group(42424242)&lt;br /&gt;#'42,424,242'&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;</description>
      <pubDate>Thu, 18 Aug 2005 22:14:20 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/584</guid>
      <author>korakot (Korakot Chaovavanich)</author>
    </item>
  </channel>
</rss>
