* @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org) * @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3 * @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2 * @version $Id$ */ // +-------------------------------------------------------------------------------------------------------------------+ class Insertionflore extends Script { protected $dao; protected $dossier; protected $flore; protected $parametres_autorises = array( '-n' => array(true, true, 'Nom du fichier ou du dossier à traiter')); public function executer() { include_once dirname(__FILE__).'/bibliotheque/FloreDao.php'; Config::charger(dirname(__FILE__).'/sophy.ini'); $this->dossier = Config::get('dossierDonneesSophy').'FLORE/'; $this->dao = new FloreDao(); // Récupération de paramètres // Lancement de l'action demandée $cmd = $this->getParametre('a'); switch ($cmd) { case 'florenbi' : // fournier $this->executerFlorenbi(); break; case 'bdnff' : // bdnff $this->executerBdnff(); break; case 'listepla' : // fournier/bdnff $this->executerListePla(); break; case 'floeur' : // flora europea $this->executerFloeur(); break; case 'bryo' : // bryophyte $this->executerBryo(); break; case 'syntri' : //syntri : numéro complémentaire $this->executerSyntri(); break; case 'ciff' : // CIFF CIFF/BDNFF $this->executerCiff(); break; case 'donneebb' : // Num_nom num_tax bdnff $this->executerDonneebb(); break; case 'codefr' : // CODEFR94 $this->executerCodefr(); break; default : $this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd)); } } // +-------------------------------------------------------------------------------------------------------------------+ // Traitement du fichier flore florenbi qui contient tous codes, numéro et nom fournier // /opt/lampp/bin/php cli.php sophy/insertionflore -a florenbi -n ./../donnees/sophy/2010-12-02/FLORE/FLORENBI private function executerFlorenbi() { $nomFichier = $this->dossier.'FLORENBI'; if (file_exists($nomFichier) === true) { if ( $fichierOuvert = fopen($nomFichier, 'r') ) { $nom = ''; while ($ligne = fgets($fichierOuvert)) { if (preg_match('/^\s{2}[\d\s]{4}\s([\d\s]{3}\d)\s{2}([\d\s]\d\.\d\d\.\d)\s[\d\s]{5}[A-Z\s]\s(\d)\s*(.+)$/', $ligne, $champs)) { // si le rang taxonomique est inf à 4 (subsp et var) if ($champs[3] < 4) { $flore[$champs[1]] = $champs[4]; $nom = trim($champs[4]); } else { $flore[$champs[1]] = $nom." ".$champs[4]; } } } $info = $this->dao->integrerFlore($flore, 'fournier'); $this->traiterErreur($info); } fclose($fichierOuvert); } else { $this->traiterErreur("Le fichier {$fichier} n'existe pas."); } } // +-------------------------------------------------------------------------------------------------------------------+ // Traitement du fichier flore florenbi qui contient tous codes, numéro et nom fournier // /opt/lampp/bin/php cli.php sophy/insertionflore -a florenbi -n ./../donnees/sophy/2010-12-02/FLORE/FLORENBI private function executerBdnff() { $nomFichier = $this->dossier.'bdnffv5.csv'; if (file_exists($nomFichier) === true) { $this->dao->chargerDonnees($nomFichier, 'sophy_bdnff'); } else { $this->traiterErreur("Le fichier {$nomFichier} n'existe pas."); } } // +-------------------------------------------------------------------------------------------------------------------+ // Traitement du fichier flore listePla qui contient numéro de fournier, nom de fournier, numéro bdnff, nom bdnff // /opt/lampp/bin/php -d memory_limit=2048M cli.php insertionFlore -a listepla -n ./../doc/jeux_test/FLORE/LISTEPLA.csv private function executerListePla() { // Parcours le fichier .csv et enregistre chaque ligne dans un tableau. $nomFichier = $this->dossier.'LISTEPLA.csv'; if ($nomFichier && file_exists($nomFichier) ){ $extensionFichier = strtolower(strrchr($nomFichier, '.')); if ($extensionFichier === ".csv"){ $file = new SplFileObject($nomFichier); $file->setFlags(SplFileObject::SKIP_EMPTY); $i = 0; echo "Traitement de LISTEPLA : "; while (!$file->eof()){ $flore = $this->transformerFournierBdnff($file->fgetcsv()); echo str_repeat(chr(8), ( strlen( $i ) + 1 ))."\t".$i++; } echo "\n"; //$info = $this->dao->integrerFlore($this->flore['bdnff'], 'bdnff'); $info .= $this->dao->integrerFlore($this->flore['correspondance'], 'fournier_bdnff'); $this->traiterErreur($info); } else { $this->traiterErreur("Le fichier $nomFichier n'est pas au format csv."); } } else { $this->traiterErreur("Le fichier $nomFichier n'existe pas."); } } private function transformerFournierBdnff($ligne_csv){ //$this->flore['bdnff'][$ligne_csv[5]] = $ligne_csv[6]; $this->flore['correspondance'][$ligne_csv[3]] = $ligne_csv[5]; } // +-------------------------------------------------------------------------------------------------------------------+ // Traitement du fichier flore floeur.bis qui contient numéro et nom de flora europea // /opt/lampp/bin/php -d memory_limit=2048M cli.php insertionFlore -a floeur -n ./../doc/jeux_test/FLORE/FLOEUR.BIS private function executerFloeur() { $nomFichier = $this->dossier.'FLOEUR.BIS'; if (file_exists($nomFichier) === true) { if ( $fichierOuvert = fopen($nomFichier, 'r') ) { $i = 0; while ($ligne = fgets($fichierOuvert)) { if (preg_match('/^\s[\d\s]{9}[\d\sA-Z]\s([\d\s]{4}\d)\s(.{71})[\s\d]{2}/', $ligne, $champs)) { $this->flore[$champs[1]] = trim($champs[2]); } } $info = $this->dao->integrerFlore($this->flore, 'flora_europea'); $this->traiterErreur($info); } fclose($fichierOuvert); } else { $this->traiterErreur("Le fichier {$nomFichier} n'existe pas."); } } // +-------------------------------------------------------------------------------------------------------------------+ // Traitement du fichier flore codebry qui contient numéro et nom des bryophytes // /opt/lampp/bin/php -d memory_limit=2048M cli.php insertionFlore -a bryo -n ./../doc/jeux_test/FLORE/codebry.txt private function executerBryo() { $nomFichier = $this->dossier.'codebry.txt'; if (file_exists($nomFichier) === true) { if ( $fichierOuvert = fopen($nomFichier, 'r') ) { $i = 0; while ($ligne = fgets($fichierOuvert)) { if (preg_match('/^\s([\d\s]{4})\s[\d\s][\d\s]{4}\s{2}\d\s*(.*)\s[\d\s]{4}/', $ligne, $champs)) { if ($champs[1] != 0) { $this->flore[$champs[1]] = trim($champs[2]); } } } $info = $this->dao->integrerFlore($this->flore, 'bryophyte'); $this->traiterErreur($info); } fclose($fichierOuvert); } else { $this->traiterErreur("Le fichier {$nomFichier} n'existe pas."); } } // +-------------------------------------------------------------------------------------------------------------------+ // Traitement du fichier flore Syntri qui contient numéro de fournier, numéro syntri, nom syntri // /opt/lampp/bin/php -d memory_limit=2048M cli.php insertionFlore -a syntri -n ./../doc/jeux_test/FLORE/SYNTRI.TXT private function executerSyntri() { $nomFichier = $this->dossier.'SYNTRI.TXT'; if (file_exists($nomFichier) === true) { if ( $fichierOuvert = fopen($nomFichier, 'r') ) { $i = 0; while ($ligne = fgets($fichierOuvert)) { if (preg_match('/^(\d+)\s{2}\d\s([A-Z,\-\'\.()\s]+[A-Z,\-\'\.()])\s+([\d\s]+)$/', trim($ligne), $champs)) { $syntri = preg_split('/\s+/', $champs[3]); if (count($syntri) == 3) { $num = $syntri[1]; } elseif (count($syntri) == 1){ $num = $syntri[0]; } if (isset($flore['correspondance'][$num])) { $flore['syntri'][$num] = $flore['syntri'][$num].$champs[2]; } else { $flore['correspondance'][$num] = $champs[1]; $flore['syntri'][$num] = $champs[2]; } $i++; } } $info = $this->dao->integrerFlore($flore['syntri'], 'syntri'); $info .= $this->dao->integrerFlore($flore['correspondance'], 'syntri_fournier'); $this->traiterErreur($info); } fclose($fichierOuvert); } else { $this->traiterErreur("Le fichier {$nomFichier} n'existe pas."); } } // /opt/lampp/bin/php -d memory_limit=2048M cli.php insertionFlore -a ciff -n ./../doc/jeux_test/FLORE/ciff.txt private function executerCiff() { $nomFichier = $this->dossier.'ciff.txt'; if (file_exists($nomFichier) === true) { if ( $fichierOuvert = fopen($nomFichier, 'r') ) { $i = 0; while ($ligne = fgets($fichierOuvert)) { if (preg_match('/^(\d*)\t([A-Za-z].*)\t(\d*)\t\d*/', $ligne, $champs)) { $flore['ciff'][$champs[1]] = $champs[2]; if ($champs[3] != '') { $flore['correspondance'][$champs[1]] = $champs[3]; } } } $info = $this->dao->integrerFlore($flore['ciff'], 'ciff'); $info .= $this->dao->integrerFlore($flore['correspondance'], 'ciff_bdnff'); $this->traiterErreur($info); } fclose($fichierOuvert); } else { $this->traiterErreur("Le fichier {$nomFichier} n'existe pas."); } } // +-------------------------------------------------------------------------------------------------------------------+ // Traitement du fichier flore donneebb.tri qui contient le numero tax t numero nomenclatural de la bdnff // num_tax||num_nom||num_nom_retenu||?||nom // /opt/lampp/bin/php -d memory_limit=2048M cli.php insertionFlore -a donneebb -n ./../doc/jeux_test/FLORE/donneebb.tri private function executerDonneebb() { $nomFichier = $this->dossier.'donneebb.tri'; if (file_exists($nomFichier) === true) { if ( $fichierOuvert = fopen($nomFichier, 'r') ) { while ($ligne = fgets($fichierOuvert)) { if (preg_match('/^([\d\s]{4}\d)\|([\d\s]{5})\|([\d\s]{5})\|/', $ligne, $champs)) { if (!isset($this->flore[$champs[1]])) { $this->flore[$champs[2]]['num_tax'] = $champs[1]; if (trim($champs[3]) != '') { $this->flore[$champs[2]]['num_nom_retenu'] = $champs[3]; } else { $this->flore[$champs[2]]['num_nom_retenu'] = $champs[2]; } } } } $info = $this->dao->ajouterColonnes($this->flore, 'sophy_bdnff'); $this->traiterErreur($info); } fclose($fichierOuvert); } else { $this->traiterErreur("Le fichier {$nomFichier} n'existe pas."); } } // +-------------------------------------------------------------------------------------------------------------------+ // Traitement du fichier flore codefr94 qui contient numéro et nom codefr94 // /opt/lampp/bin/php -d memory_limit=2048M cli.php insertionFlore -a ciff -n ./../doc/jeux_test/FLORE/CODEFR94 private function executerCodefr() { $nomFichier = $this->dossier.'CODEFR94'; if (file_exists($nomFichier) === true) { if ( $fichierOuvert = fopen($nomFichier, 'r') ) { $i = 0; while ($ligne = fgets($fichierOuvert)) { if (preg_match('/^([\d\s]{5})[\d\s]{7}(.*)/', $ligne, $champs)) { $flore[$champs[1]] = trim($champs[2]); } } $info = $this->dao->integrerFlore($flore, 'codefr94'); $this->traiterErreur($info); } fclose($fichierOuvert); } else { $this->traiterErreur("Le fichier {$nomFichier} n'existe pas."); } } }