Création de table à partir de fichier CSV

Imprimer
J'ai eu besoin de créer des tables SQLite à partir de fichiers CSV.
Ces fichiers CSV comportait les noms de colonnes en première ligne.

J'ai donc créé un script PHP en ligne de commande que je vous mets à disposition. Vous pouvez facilement modifier ce script pour l'adapter à vos besoins.
Pour l'utiliser :
php -q tableFromCsv.php sqliteDatabase tableName CSV_Filename [separator] [delimitor]
ou
./tableFromCsv.php sqliteDatabase tableName CSV_Filename [separator] [delimitor]

sqliteDatabase : nom de fichier de la base de données SQLite2 (avec le chemin absolu ou relatif)
tableName : nom de la nouvelle table
CSV_Filename : nom du fichier CSV à importer (avec le chemin absolu ou relatif)
separator : caractère separateur de données (Optionnel par defaut ';')
delimitor : délimiteur de chaine (Optionnel par défaut vide)

Voici le script :
#!/usr/local/bin/php
/*
* Créé une table à partir d'un fichier CSV dont la première ligne contient les titres de colonne
*
* Utilisation :
* php -q tableFromCsv.php sqliteDatabase tableName CSV_Filename [separator] [delimitor]
* ./tableFromCsv.php sqliteDatabase tableName CSV_Filename [separator] [delimitor]
*/

if(count($_SERVER['argv'])>=4) {
$databaseFile = $_SERVER['argv'][1];
$tableName = $_SERVER['argv'][2];
$csvFilename = $_SERVER['argv'][3];

if(isset($_SERVER['argv'][4])) $separator = $_SERVER['argv'][4]; else $separator = ';';
if(isset($_SERVER['argv'][5])) $delimiteur = $_SERVER['argv'][5]; else $delimiteur = null;

if($db = sqlite_open($databaseFile, 0666, $sqliteError)) {
$row = 0;
$handle = fopen($csvFilename, "r");
while (($data = fgetcsv($handle, 0, $separator)) !== FALSE) {
if(!$row) {
if(!sqlite_query($db, "CREATE TABLE ".$tableName." (".implode(', ', $data).");")) {
echo "La création de la table à échoué.";
exit;
}
} else {
$tempTab = array();
foreach($data as $val) {
$val = utf8_decode($val);
$val=str_replace("''", "'", $val);
$tempTab[] = "'" . sqlite_escape_string($val) . "'";
}
$q = "INSERT INTO ".$tableName." VALUES (".implode(", ", $tempTab).");";
sqlite_query($db, $q);
}
$row++;
}
fclose($handle);
} else {
echo "la connexion à la base SQLite : ".$databaseFile." à echoué";
}
} else {
echo "
Usage :
tableFromCsv.php database tableName csvFilename [separator] [delimitor]";
}