Section courante

A propos

Section administrative du site

Le format CSV est un format d'échange de données situés au même niveau qu'un tableur et permettant de transmettre des informations d'une application ou d'un serveur à l'autre. Bien que le CSV soit en format ASCII, il en demeure assez difficile à lire, et peut pratique si vous voulez faire des recherches avec une base de données SQL. Ainsi, si vous souhaitez combiner par exemple un CSV avec un table de données existantes, il est difficile de le faire si vous ne convertissez pas vos données en de CSV à SQL. L'ennui avec le format CSV c'est qu'il n'est pas vraiment standard, ainsi parfois le séparateur, est un caractère «,», «;», «|». Ainsi, il n'est pas toujours évidant d'avoir un convertisseur universel de CSV à SQL. L'exemple suivant, perçu comme un «CSV-TO-SQL» en PHP, permet de convertir un fichier CSV (source.csv) en fichier SQL (dest.sql) :

  1. <?php
  2. $Source = 'source';
  3. $Header = true;
  4. $Separator = '|';
  5. $Protected = "`"; // Caractère pour délimiter les identificateurs, par défaut ` en MySQL et MariaDB
  6. $I = 0;
  7. if($fileRead = fopen($Source.".csv", 'r')) {
  8.     $fileWrite = fopen('dest.sql', 'w');
  9.     $ColumnName = array();
  10.     while($CurrLine = fgets($fileRead)) {
  11.         if($Header && ($I == 0)) {
  12.             for($Cellule = '', $K = 0,$J = 0; $J < strlen($CurrLine); $J++) {
  13.                 if($CurrLine[$J] == $Separator) {
  14.                     $ColumnName[$K] = trim($Cellule);
  15.                     $Cellule = '';
  16.                     $K++;
  17.                 } else {
  18.                     if(preg_match('/^[a-zA-Z0-9]+$/', $CurrLine[$J])) $Cellule .= $CurrLine[$J];
  19.                 }
  20.             }
  21.             $ColumnName[$K++] = trim($Cellule);
  22.             $I++;
  23.             fwrite($fileWrite, 'CREATE TABLE '.$Protected.$Source.$Protected.' ('."\n");
  24.             for($J = 0; $J < count($ColumnName); $J++) {
  25.                 fwrite($fileWrite,$Protected.$ColumnName[$J].$Protected.' TEXT'.($J < count($ColumnName)-1?',':'')."\n");
  26.             }
  27.             fwrite($fileWrite, ');'."\n");
  28.         } else if($CurrLine != '') {
  29.             fwrite($fileWrite, 'INSERT INTO '.$Protected.$Source.$Protected.' (');
  30.             for($J = 0; $J < count($ColumnName); $J++) {
  31.                 fwrite($fileWrite,$Protected.$ColumnName[$J].$Protected.($J < count($ColumnName)-1?',':''));
  32.             }
  33.             fwrite($fileWrite, ') VALUES (');
  34.             for($Cellule = '', $K = 0,$J = 0; $J < strlen($CurrLine); $J++) {
  35.                 if($CurrLine[$J] == $Separator) {
  36.                     if($Header) {
  37.                         fwrite($fileWrite, "'".str_replace("'","''",$Cellule)."'".($K < count($ColumnName)-1?',':''));
  38.                     }
  39.                     $Cellule = '';
  40.                     $K++;
  41.                 } else {
  42.                     if(ord($CurrLine[$J]) >= 32) $Cellule .= $CurrLine[$J];
  43.                 }
  44.             }
  45.             fwrite($fileWrite, "'".str_replace("'","''",$Cellule)."'".');'."\n");
  46.             $I++;
  47.         }
  48.     }
  49.     fclose($fileWrite);
  50.     fclose($fileRead);
  51. }
  52. ?>

Si vous avez le fichier «source.csv» suivant :

ID|Nom|Email|
1|Support|support@gladir.com
2|Sylvain Maltais|smaltais@gladir.com
3|Sylvain Maltais|smaltais@gladir.ca

Vous obtiendrez le résultat suivant dans le fichier «dest.sql» :

CREATE TABLE `source` (
`ID` TEXT,
`Nom` TEXT,
`Email` TEXT
);
INSERT INTO `source` (`ID`,`Nom`,`Email`) VALUES ('1','Support','support@gladir.com');
INSERT INTO `source` (`ID`,`Nom`,`Email`) VALUES ('2','Sylvain Maltais','smaltais@gladir.com');
INSERT INTO `source` (`ID`,`Nom`,`Email`) VALUES ('3','Sylvain Maltais','smaltais@gladir.ca');


Dernière mise à jour : Vendredi, le 3 mars 2017