]> gitweb.factorcode.org Git - factor.git/commitdiff
Fixing minor CSV bug
authorDaniel Ehrenberg <littledan@Macintosh-103.local>
Thu, 12 Feb 2009 07:32:06 +0000 (01:32 -0600)
committerDaniel Ehrenberg <littledan@Macintosh-103.local>
Thu, 12 Feb 2009 07:32:06 +0000 (01:32 -0600)
basis/csv/csv-tests.factor
basis/csv/csv.factor

index 50bc3836f5f40d37d595d407125c89da05acc658..6ba8e2d5b8a965b67767fc7400ce751aed0c3892 100644 (file)
@@ -7,9 +7,6 @@ IN: csv.tests
 : named-unit-test ( name output input -- ) 
   unit-test drop ; inline
 
-! tests nicked from the wikipedia csv article
-! http://en.wikipedia.org/wiki/Comma-separated_values
-
 "Fields are separated by commas"
 [ { { "1997" "Ford" "E350" } } ] 
 [ "1997,Ford,E350" <string-reader> csv ] named-unit-test
@@ -90,3 +87,5 @@ IN: csv.tests
     { { "writing,some,csv,tests" } } dup "csv-test2-"
     unique-file utf8 [ csv>file ] [ file>csv ] 2bi =
 ] unit-test
+
+[ { { "hello" "" "" "" "goodbye" "" } } ] [ "hello,,\"\",,goodbye," <string-reader> csv ] unit-test
index 152b3dcbba544f354d45c6af70d3485f51e66dde..5902999a7641f69d8f585dfac75ae992be1d937b 100755 (executable)
@@ -46,13 +46,15 @@ DEFER: quoted-field ( -- endchar )
 
 : (row) ( -- sep )
     field , 
-    dup delimiter get = [ drop (row) ] when ;
+    dup delimiter> = [ drop (row) ] when ;
 
 : row ( -- eof? array[string] )
     [ (row) ] { } make ;
 
 : (csv) ( -- )
-    row harvest [ , ] unless-empty [ (csv) ] when ;
+    row
+    dup [ empty? ] all? [ drop ] [ , ] if
+    [ (csv) ] when ;
   
 PRIVATE>
 
@@ -60,7 +62,8 @@ PRIVATE>
     [ row nip ] with-input-stream ;
 
 : csv ( stream -- rows )
-    [ [ (csv) ] { } make ] with-input-stream ;
+    [ [ (csv) ] { } make ] with-input-stream
+    dup peek { "" } = [ but-last ] when ;
 
 : file>csv ( path encoding -- csv )
     <file-reader> csv ;