Bonsoir,

j'ai un code pour lire des fichiers CSV qui fonctionne bien si les cellules sont écrites sur une seule ligne mais qui échoue si elles sont écrites sur plusieurs lignes. Peut-on me dire ce qu'il faudrait faire ?

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 $enclosure   = empty(self::$enclosure) ? chr(8) : self::$enclosure;
 while (($row = fgetcsv(self::$handle, $buffer, self::$separator, $enclosure)) !== false) {
      $key = self::$header;
      $value = $row;
 
      self::$data[] = array_combine($key, $value);
}
La ligne qui définit $enclosure n'est pas de moi mais je vois que $enclosure vaut \b.

Si une cellule du fichier CSV est écrite sur plusieurs lignes, j'ai ce message d'erreur :
Fatal error: Uncaught ValueError: array_combine(): Argument #1 ($keys) and argument #2 ($values) must have the same number of elements in C:\projets\ticket_rawsrc\model\CSVParser.php:119 Stack trace: #0 C:\projets\ticket_rawsrc\model\CSVParser.php(119): array_combine(Array, Array) #1 C:\projets\ticket_rawsrc\model\CSVImport.php(38): ticket_rawsrc\model\CSVParser::parse('C:\\projets\\tick...', 4096) #2 C:\projets\ticket_rawsrc\controller\CSVImportController.php(72): ticket_rawsrc\model\CSVImport::uploadFile('C:\\projets\\tick...') #3 C:\projets\ticket_rawsrc\index.php(112): ticket_rawsrc\controller\CSVImportController->invoke(Array) #4 {main} thrown in C:\projets\ticket_rawsrc\model\CSVParser.php on line 119
et il semblerait que ça vient du fait que seule la première ligne de la cellule du fichier CSV est prise en compte (c'est ma déduction, mais n'en suis pas sûr)

Si je fais du debug :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$enclosure   = empty(self::$enclosure) ? chr(8) : self::$enclosure;
while (($row = fgetcsv(self::$handle, $buffer, self::$separator, $enclosure)) !== false) {
      $key = self::$header;
      $value = $row;
      UtilFct::debug("csvparser 99 row ",$row);
      //deb debug
      echo '<br/><br/>key count : ', count($key).'<br/>';
      echo 'value count : ', count($value)."<br/><br/>";
      $i=0;
      foreach($key as $one_key)
      {
          echo "key(".$i++.")";
          var_export($one_key);
           echo '<br/>';
      }
      $i=0;
 
      foreach($value as $one_value)
      {
            echo "value(".$i++.")";
            var_export($one_value);
            echo '<br/>';
       }
       echo "<br/><br/>";
       //end debug
       self::$data[] = array_combine($key, $value);
}
ça donne :
csvparser 99 row
array(5) {
[0]=>
string(7) "sept-21"
[1]=>
string(3) "MEA"
[2]=>
string(2) "No"
[3]=>
string(3) "Web"
[4]=>
string(24) ""ISSUE: Opus - OE Tools\"
}



key count : 6
value count : 5

key(0)'mois de months'
key(1)'regions (1)'
key(2)'reopened'
key(3)'reported source'
key(4)'resolution'
key(5)'resolution ola status'
value(0)'sept-21'
value(1)'MEA'
value(2)'No'
value(3)'Web'
value(4)'"ISSUE: Opus - OE Tools\\'
alors que la cellule sur plusieurs lignes contient :
ISSUE: Opus - OE Tools
CAUSE: I cannot install new OPUS Tool  issue is I do not have Administrator 
RESOLUTION: 
DID USER CONFIRMED ISSUE RESOLVED: Yes
To obtain more detailed information about this ticket, you just have to go to the 2929IT Portal Ho