Use fgetcsv to read a csv line.
authorx2003bruneau <x2003bruneau@839d8a87-29fc-0310-9880-83ba4fa771e5>
Tue, 16 Jan 2007 10:27:13 +0000 (10:27 +0000)
committerx2003bruneau <x2003bruneau@839d8a87-29fc-0310-9880-83ba4fa771e5>
Tue, 16 Jan 2007 10:27:13 +0000 (10:27 +0000)
This allows string enclosure (machin;"truc;bidule";chouette generates 3 entries: "machin", "truc;bidule" and "chouette")

git-svn-id: svn+ssh://murphy/home/svn/platal/trunk@1346 839d8a87-29fc-0310-9880-83ba4fa771e5

classes/csvimporter.php

index 5f1b4af..da8ed5a 100644 (file)
@@ -30,7 +30,6 @@ class CSVImporter
     private $do_sql;
 
     private $index;
-    private $separator;
     private $data = array();
 
     private $user_functions = array();
@@ -44,9 +43,8 @@ class CSVImporter
         $this->do_sql    = $do_sql;
     }
 
-    private function processLine($line)
+    private function processLine(array $array)
     {
-        $array = explode($this->separator, $line);
         if (is_null($this->index)) {
             $this->index = array_map('strtolower', $array);
             return true;
@@ -131,12 +129,16 @@ class CSVImporter
 
     public function setCSV($csv, $index = null, $separator = ';')
     {
+        require_once dirname(__FILE__) . '/varstream.php';
+        VarStream::init();
+        global $csv_source;
         $this->index     = null;
-        $this->separator = $separator;
-        $csv   = preg_split("/(\r\n|\r|\n)/", $csv);
+        
+        $csv_source = $csv;
+        $res        = fopen('var://csv_source', 'r');
 
-        foreach ($csv as $line) {
-            $this->processLine($line);
+        while (!feof($res)) {
+            $this->processLine(fgetcsv($res, 0, $separator));
         }
     }
 
@@ -258,7 +260,6 @@ class CSVImporter
             if (empty($sep)) {
                 $sep = ';';
             }
-            echo $sep;
             $this->setCSV($csv, null, $sep);
         }
         if ($current == 'values' && Env::has('csv_valid')) {