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, toutefois on peut le convertir sans problème majeur en format XML pour rendre plus compréhensible les données. L'ennui avec le format CSV c'est qu'il n'est pas vraiment standard, ainsi parfois le séparateur, est un caractère «,», «;», «|». De plus, parfois les chaines de caractères sont situés entre guillemets, d'autre fois ce sont uniquement uniquement le texte qu'il l'est. Ainsi, il n'est pas toujours évidant d'avoir un convertisseur universel de CSV à XML. L'exemple suivant, perçu comme un «CSV-TO-XML» en PHP, permet de convertir un fichier CSV (source.csv) en fichier XML (dest.xml) :

  1. <?php
  2. $Header = true;
  3. $Separator = '|';
  4. $I = 0;
  5. if($fileRead = fopen("source.csv", 'r')) {
  6.     $fileWrite = fopen('dest.xml', 'w');
  7.     fwrite($fileWrite, '<?xml version="1.0" encoding="ISO-8859-15"?>'."\n");
  8.     fwrite($fileWrite, '<root>'."\n");
  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.         } else if($CurrLine != '') {
  24.             fwrite($fileWrite, '<entry>'."\n");
  25.             for($Cellule = '', $K = 0,$J = 0; $J < strlen($CurrLine); $J++) {
  26.                 if($CurrLine[$J] == $Separator) {
  27.                     if($Header) {
  28.                         fwrite($fileWrite, '<'.$ColumnName[$K].'>'.$Cellule.'</'.$ColumnName[$K].'>'."\n");
  29.                     } else {
  30.                         fwrite($fileWrite, '<cellule'.$K.'>'.$Cellule.'</cellule'.$K.'>'."\n");
  31.                     }
  32.                     $Cellule = '';
  33.                     $K++;
  34.                 } else {
  35.                      if(ord($CurrLine[$J]) >= 32) $Cellule .= $CurrLine[$J];
  36.                 }
  37.             }
  38.             if($Header) {
  39.                 fwrite($fileWrite, '<'.$ColumnName[$K].'>'.$Cellule.'</'.$ColumnName[$K].'>'."\n");
  40.             } else {
  41.                 fwrite($fileWrite, '<cellule'.$K.'>'.$Cellule.'</cellule'.$K.'>'."\n");
  42.             }
  43.             fwrite($fileWrite, '</entry>'."\n");
  44.             $I++;
  45.         }
  46.     }
  47.     fwrite($fileWrite, '</root>'."\n");
  48.     fclose($fileWrite);
  49.     fclose($fileRead);
  50. }
  51. ?>

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.xml» :

<?xml version="1.0" encoding="ISO-8859-15"?>
<root>
<entry>
<ID>1</ID>
<Nom>Support</Nom>
<Email>support@gladir.com</Email>
</entry>
<entry>
<ID>2</ID>
<Nom>Sylvain Maltais</Nom>
<Email>smaltais@gladir.com</Email>
</entry>
<entry>
<ID>3</ID>
<Nom>Sylvain Maltais</Nom>
<Email>smaltais@gladir.ca</Email>
</entry>
</root>


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