Rev 11 | Rev 24 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/** Exemple lancement:* /opt/lampp/bin/php -d memory_limit=3500M ~/web/eflore-projets/scripts/cli.php nvjfl* -a indexer* -f /home/jpm/eflore/donnees/nvjfl/2007-10-29/nvjfl_v2007-10-29.csv* -table nvjfl_v2007* Options :* -f : indiquer le chemin du fichier à analyser*/class Nvjfl extends Script {private $bdd = null;private $nomsIndex = array();private $numeroIndex = 1;protected $parametres_autorises = array('-f' => array(true, null, 'Chemin du fichier à analyser'),'-test' => array(false, 10, 'Permet de tester le script sur un jeux réduit de données (indiquer le nombre de lignes).'),'-table' => array(true, true, 'Nom de la table où insérer les données.'));public function executer() {// Lancement de l'action demandéetry {$cmd = $this->getParametre('a');switch ($cmd) {case 'indexer' :$this->indexer();break;default :$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd));}} catch (Exception $e) {$this->traiterErreur($e->getMessage());}}/*** Créer un index pour un nom identique la clé primaire est composée de cet index + num_taxon + langue*/private function indexer() {$fichierOuvert = $this->ouvrirFichier($this->getParametre('f'));$this->bdd = new Bdd();$donnees = $this->analyserFichier($fichierOuvert);fclose($fichierOuvert);foreach ($donnees as $donnee) {$requete = 'INSERT INTO '.$this->getParametre('table').' VALUES ('.implode(', ', $donnee).')';$this->bdd->requeter($requete);$this->afficherAvancement("Insertion des noms vernaculaires dans la base de données");if ($this->stopperLaBoucle()) {break;}}echo "\n";}private function stopperLaBoucle() {$stop = false;static $ligneActuelle = 1;if ($nbreLignesATester = $this->getParametre('test')) {if ($nbreLignesATester == $ligneActuelle++) {$stop = true;}}return $stop;}private function analyserFichier($fichierOuvert) {$donnees = array();$entetesCsv = fgets($fichierOuvert);while ($ligneCsv = fgets($fichierOuvert)) {$champs = explode("\t", trim($ligneCsv));$nomVernaculaire = $champs[2];$indexCourrant = $this->getIndexNomVernaculaire($nomVernaculaire);$champs = array_merge(array($indexCourrant), $champs);$donnees[] = $this->protegerValeursDesChamps($champs);$this->afficherAvancement("Analyse du fichier des noms vernaculaires");if ($this->stopperLaBoucle()) {break;}}echo "\n";return $donnees;}private function getIndexNomVernaculaire($nomVernaculaire) {$indexCourrant = null;if (array_key_exists($nomVernaculaire, $this->nomsIndex) == false) {$this->nomsIndex[$nomVernaculaire] = $this->numeroIndex++;}$indexCourrant = $this->nomsIndex[$nomVernaculaire];return $indexCourrant;}private function ouvrirFichier($chemin) {$fichierOuvert = false;if ($chemin) {if (file_exists($chemin) === true) {$fichierOuvert = fopen($chemin, 'r');if ($fichierOuvert == false) {throw new Exception("Le fichier $chemin n'a pas pu être ouvert.");}} else {throw new Exception("Le fichier $chemin est introuvable.");}} else {throw new Exception("Aucun chemin de fichier n'a été fourni.");}return $fichierOuvert;}private function protegerValeursDesChamps($champs) {$champsProteges = array();for ($i = 0; $i < 9; $i++) {$valeur = isset($champs[$i]) ? $champs[$i] : '';$champsProteges[] = $this->bdd->proteger($valeur);}return $champsProteges;}}?>