Rev 292 | Blame | Last modification | View Log | RSS feed
<?php// commande : /opt/lampp/bin/php cli.php description_sp -a tester -n /home/jennifer/Tela-botanica_projets/Coste/descriptions/htmlclass DescriptionSp extends Script {protected $donnees = array();protected $nb_espece = 0;protected $donnees_espece = array();protected $fichier;protected $table_espece = array();protected $parametres_autorises = array('-n' => array(true, null, 'nom du dossier à analyser'));public function executer() {$this->bdd = new Bdd();// Lancement de l'action demandée$cmd = $this->getParametre('a');switch ($cmd) {case 'integrer' :$this->supprimerPagesExistantes();$this->reinitialiserAutoIncrement('coste_pages');$this->reinitialiserAutoIncrement('coste_triples');$this->ouvrirDossier();$this->chargerIndexGpFG();$this->integrerSynonyme();ksort($this->table_espece);$this->recupererDonneesBdnff();$this->genererNumNom();$this->insererNumNomDansTriples();$this->creerTableCoste();$this->insererTableProjetCoste();break;default :$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd));}}//---------------------------------FONCTION DE RECUPERATION DES DONNEES SUR LES ESPECES---------------------------------private function ouvrirDossier() {$nomDossier = $this->getParametre('n');$tableaux = null;if (file_exists($nomDossier) === true) {if (is_dir($nomDossier)) {if ($dossierOuvert = opendir($nomDossier) ) {while ( ($nomFichier = readdir($dossierOuvert)) !== false) {if ( !is_dir($nomFichier) && preg_match('/e[0-9]{4}\.htm/', $nomFichier)) {$nomFichier = $nomDossier.'/'.$nomFichier;$this->traiterFichier($nomFichier);}}closedir($dossierOuvert);} else {$this->traiterErreur("Le dossier $nomDossier n'a pas pu être ouvert.");}} else {$tableaux[$nomDossier] = $this->ouvrirFichier($nomDossier);}} else {$this->traiterErreur("Le dossier $nomDossier est introuvable.");}$this->traiterInfo('Nombre d\'espèce : '.$this->nb_espece);//$this->creerFichier('donneesEspeces.tsv', $this->donnees_espece, '/home/jennifer/Tela-botanica_projets/Coste/descriptions/');return $tableaux;}private function supprimerPagesExistantes() {//suppression des tuples déjà existants$requete = 'DELETE FROM coste_pages WHERE id > 35';$this->bdd->requeter($requete);$requete = 'DELETE FROM coste_triples WHERE id > 1';$this->bdd->requeter($requete);$requete = 'DELETE FROM coste_correspondance_bdnff ';$this->bdd->requeter($requete);$this->traiterInfo('Table coste_pages, coste_triple et coste_correspondance_bdnff ont été vidés :)');}private function reinitialiserAutoIncrement($table) {$requete_max_id = 'SELECT max(id) FROM '.$table;$id_max = $this->bdd->recuperer($requete_max_id);$id_max = $id_max['max(id)'];$id_max = $id_max+1;$requete_pages = 'ALTER TABLE '.$table.' AUTO_INCREMENT = '.$id_max;$this->bdd->requeter($requete_pages);}private function traiterFichier($nomFichier) {$donnees = $this->ouvrirFichier($nomFichier);if ($donnees['ouvert'] == "oui") {$donneesTag = $this->creerNomPage($donnees['tag']);//on insère le triple titre dans coste_triples$this->donnees_espece[] = $donneesTag;$requetePage = 'INSERT INTO coste_pages (tag, time, body, latest) VALUES ("'.$donneesTag['nomPage'].'", NOW(), "'.$donnees['texte'].'", "Y");';$requeteTriple = 'INSERT INTO coste_triples(resource, property, value) VALUES '.'("'.$donneesTag['nomPage'].'", "titre", "'.$donneesTag['titre'].'"),';//on insère les correspondances avec bdnff$donneesCorr = $this->creerCorrespondance($donnees['correspondance']);$requeteCorr = 'INSERT INTO coste_correspondance_bdnff VALUES ("'.$donneesTag['id'].'", "'.$donneesCorr['num_nom'].'", "'.$donneesCorr['num_tax'].'", "'.$donneesCorr['famille'].'", "'.$donneesCorr['nom_sci'].'");';$requete = $requetePage." ".rtrim($requeteTriple, ',')."; ".$requeteCorr;$this->bdd->requeter($requete);$this->nb_espece++;$this->afficherAvancement("insertion espece");}}private function ouvrirFichier($nomFichier) {$this->fichier = $nomFichier;$donnees = null;if (file_exists($nomFichier) === true && preg_match('/e[0-9]{4}.htm$/', $nomFichier)) {if ( $fichierOuvert = fopen($nomFichier, 'r') ) {$donnees['ouvert'] = "oui";$i = 1;while ($ligne = fgets($fichierOuvert)) {if ($i == 24) {$donnees['tag'] = $this->traiterHtml($ligne);} elseif ($i == 45) {$donnees['texte'] = $this->traiterHtml($ligne, $au = true);$this->donnees['texte'] = $this->traiterHtml($ligne);} elseif ($i == 46 || $i == 47) {$donnees['texte'] .= $this->traiterHtml($ligne);} elseif ($i == 63 || preg_match('/Bdnff /ui', $ligne)) {$donnees['correspondance'] = $this->traiterHtml($ligne);}$i++;}fclose($fichierOuvert);} else {$this->traiterErreur("Le fichier $nomFichier n'a pas pu être ouvert.");}} else {$this->traiterErreur("Le fichier $nomFichier est introuvable.");}return $donnees;}private function traiterHtml($donnees, $au = null) {$donnees_traitees = strip_tags($donnees,'<B>,<I>');$donnees_traitees = html_entity_decode($donnees_traitees, ENT_NOQUOTES, 'UTF-8');$donnees_traitees = str_replace('<B>', '**', $donnees_traitees);$donnees_traitees = str_replace('</B>', '**', $donnees_traitees);$donnees_traitees = str_replace('<I>', '//', $donnees_traitees);$donnees_traitees = str_replace('</I>', '//', $donnees_traitees);$donnees_traitees = trim($donnees_traitees);if ($au) {$donnees_traitees = str_replace('­', '', $donnees_traitees);}return $donnees_traitees;}private function creerNomPage($tag) {$partiesTag = explode(' - ', $tag);preg_match('/(C.*)/', $tag, $titre);$donnees['titre'] = $titre[0];list($num, $donnees['id']) = explode(' ', trim($partiesTag[0]));list($num, $donnees['num_nom_coste'] ) = explode(' ', trim($partiesTag[0]));$donnees['nom_sci'] = trim($partiesTag[1]);$partiesNomSci = explode(' ', $donnees['nom_sci']);list($numFamille, $donnees['famille']) = explode(', ', trim($partiesTag[2]));list($num, $tomePage) = explode(',', trim($partiesTag[3]));if (preg_match('/T(\d*)\.p(\d*)/', $tomePage, $match)){$donnees['tome'] = $match[1];$donnees['page'] = sprintf("%04d",$match[2]);}$donnees['nomPage'] = 'DscCoste1937T'.$donnees['tome'].'P'.$donnees['page'].implode(array_map('ucfirst',$partiesNomSci));if ($donnees['nomPage'] == 'DscCoste1937TP') echo 'MERDE!!!!!!!!!!!! à la page '.$this->fichier;$partieNumTaxSupFamille = explode(',', $partiesTag[2]);$partieNumTaxSupGenre = explode(',', $partiesTag[3]);$donnees['num_tax_sup_genre'] = trim($partieNumTaxSupGenre[0]);//on recupère les auteurs, synonymes et nom_vernaculaires$this->recupererInfosComplementaires($donnees);return $donnees;}private function recupererInfosComplementaires(&$donnees) {$this->donnees['texte'] = str_replace('', '', $this->donnees['texte']); //on enlève un petit tiret présent entre la plupart des mots (non visible ici)preg_match('/^ {0,1}[*]{2}([^*]+)[*]{2} ([^–(\/]+\.?)?\s*(?:[(]([^)]+)[)])?[ –.]*(?:[\/]{2}([^\/]+)\s*–\s*[\/]{2})?/', $this->donnees['texte'], $match2);$annee = '';if ($match2 == array()) echo "donnees du fichier : $this->fichier";if (isset($match2[1]) && strrpos($match2[1], ' subsp. ') !== false) {$donnees['nom_sci'] = preg_replace(array('/ All./', '/ L./','/^\s*[0-9]{4}[ –.]*/'), '', $match2[1]);}$auteur = (isset($match2[2])) ? $match2[2] : '';$synonyme = (isset($match2[3])) ? $match2[3] : '';$nom_verna = (isset($match2[4])) ? $match2[4] : '';if (preg_match('/^\s*[1-9]{4}\s*$/', $synonyme)) {$annee = $synonyme;$synonyme = '';} elseif (preg_match('/.*?([0-9]{4})/', $auteur, $annee_match) && !preg_match('/ in /', $annee_match[1])) {$annee = $annee_match[1];$auteur = preg_replace('/ [0-9]{4}/', '', $auteur);}$donnees['annee'] = $annee;$donnees['auteur'] = $auteur;$donnees['synonyme'] = $synonyme;$donnees['nom_vernaculaire'] = $nom_verna;$this->insererDansTableEspece($donnees);}private function insererDansTableEspece($donnees) {$this->table_espece[$donnees['num_nom_coste']] = array('tag' => $donnees['nomPage'],'num_nom_retenu_coste' => $donnees['num_nom_coste'],'num_nom_coste' => $donnees['num_nom_coste'],'num_tax_sup_genre' => $donnees['num_tax_sup_genre'],'rang' => 290,'nom_sci' => $donnees['nom_sci'],'auteur' => $donnees['auteur'],'nom_vernaculaire' => $donnees['nom_vernaculaire'],'nom_coste' => $donnees['nom_sci'],'tome' => $donnees['tome'],'annee' => $donnees['annee'],'synonyme' => $donnees['synonyme']);}private function creerCorrespondance($correspondance) {$parties = explode('-', $correspondance);if (isset($parties[1])) {list($num, $donnees['num_nom']) = explode(' ', trim($parties[0]));$donnees['nom_sci'] = trim($parties[1]);$donnees['famille'] = trim($parties[2]);list($num, $num_tax) = explode('=', trim($parties[3]));$donnees['num_tax'] = ($num_tax == "") ? 'NULL' : $num_tax;} else {$donnees['num_nom'] = 'NULL';$donnees['nom_sci'] = 'NULL';$donnees['famille'] = 'NULL';$donnees['num_tax'] = 'NULL';}return $donnees;}//---------------------------------------FONCTION DE CREATION DE LA TABLE COSTE------------------------------------------private function chargerIndexGpFG() {$requete = 'SELECT * FROM coste_index_general ';$resultat = $this->bdd->recupererTous($requete);foreach ($resultat as $nom) {$nom_coste = ($nom['nom_coste'] == '') ? $this->transliterer($nom['nom_sci']) : $this->transliterer($nom['nom_coste']);$nom_sci = $this->transliterer($nom['nom_sci']);$tome = $nom['tome'];$page = $nom['page'];$num_tax_sup_coste = $nom['num_tax_sup_coste'];$num_nom_coste = $nom['num_nom_coste'];$rang = $nom['rang'];$this->indexGpFG[$num_nom_coste] = array('nom_sci' => $nom_sci,'rang' => $rang,'nom_coste' => $nom_coste,'num_nom_coste' => $num_nom_coste,'num_tax_sup_coste' => $num_tax_sup_coste,'tome' => $tome,'page' => $page);}}private function transliterer($txt) {$txt = ucwords(strtolower(Chaine::supprimerAccents($txt)));return trim($txt);}private function integrerSynonyme() {foreach ($this->table_espece as $num_nom_coste => $donnees) {$et = false; //cas où on a "syno et syno L."$auteur = '';$genre_syn = '';if ($donnees['synonyme'] != '') {$donnees['synonyme'] = preg_replace(array('/^t\s{1}/','/^et\s{1}/', '/^avec /', '/, etc\.$/', '/\//', '//'), '', $donnees['synonyme']);if (strrpos($donnees['synonyme'], ';') === false&& preg_match('/^[A-Z][^ ]+ [^ ]+(?: ([^,;]+))?\s*[.]?(et|,)[ ]?[A-Z]{1}[^ on,]+ [^., ]+[ ]+(?:.*)?$/', $donnees['synonyme'], $ponctu)) {if ($ponctu[2] == 'et') {$synonymes = array_reverse(explode($ponctu[2], $donnees['synonyme']));$et = true;} else {$synonymes = explode($ponctu[2], $donnees['synonyme']);}} else {$synonymes = explode(';', $donnees['synonyme']);}$num_syn = 0; //on numerote les synonyme avec comme num_nom_coste : num_nom_coste du retenu + ".1", ".2" , ...foreach ($synonymes as $nom_syn) {$annee = '';$notes = $this->recupererLesNotesDesSynonymes($nom_syn);$this->recupererAnneeSynonyme($nom_syn, $annee);if (preg_match('/^\s*([^ ]*) ([^ ]*)( (?:VAR\.|v\.) [^ ]+)?(?: (.*))?$/', $nom_syn, $match)) {$num_syn++;$nom_sci = $this->recupererNomSciComplet($match, $donnees, $num_syn, $genre_syn);$auteur_syn = $this->recupererAuteurSyn($match, $auteur, $et);$this->ajouterSynonymeALaTableEspece($donnees, $nom_sci, $auteur_syn, $annee, $notes, $num_syn);} else {$this->traiterErreur('Synonyme '.$nom_syn.' non reconnu par l\'expression régulière ');}}}}}private function recupererNomSciComplet(&$match, &$donnees, &$num_syn, &$genre_syn) {//on récupère le nom complet du genre dans les cas ou le genre est noté : A.//Attention à l'ex suivant : D. THUILLIERI G. G. ; AIRA SETACEA Huds.; A. DISCOLOR Thuil.; A. ULIGINOSA Weiheif ($num_syn == 1 && preg_match('/^\s*[A-Z]{1}[.]\s*$/', $match[1])) {preg_match('/\s*([^ ]+) .+$/', $donnees['nom_sci'], $nom_genre);$match[1] = $nom_genre[1];$genre_syn = $nom_genre[1];} elseif (!preg_match('/^\s*[A-Z]{1}[.]\s*$/', $match[1])) {$genre_syn = $match[1];} elseif ($num_syn != 1 && preg_match('/^\s*[A-Z]{1}[.]\s*$/', $match[1])) {$match[1] = $genre_syn;}if (isset($match[3])) {$nom_sci = ucfirst(strtolower($match[1].' '.$match[2].str_replace('v. ', 'var. ', $match[3])));} else {$nom_sci = ucfirst(strtolower($match[1].' '.$match[2]));}return $nom_sci;}private function recupererAnneeSynonyme(&$nom_syn, &$annee) {if (preg_match('/ ([0-9]{4})\s*/', $nom_syn, $annee_match)) {$annee = $annee_match[1];}}private function recupererAuteurSyn(&$match, &$auteur, &$et) {//on recupere l'auteur ds une variable ds le cas ou : R. machin et R. truc auteur.if (isset($match[4]) && $match[4] != '' && $et) {$auteur = $match[4];}$auteur_syn = $auteur;if (isset($match[3]) && !$et) {$auteur_syn = preg_replace('/ [0-9]{4}/', '', $match[4]);} elseif ($auteur != '' && $et) {$auteur_syn = preg_replace('/ [0-9]{4}/', '', $auteur);}return $auteur_syn;}public function recupererLesNotesDesSynonymes(&$nom_syn) {// on recupère les notesif (preg_match('/^(ompr.|incl.) (.*)/i', $nom_syn, $note_abbr)) {$notes = ($note_abbr[1] == 'ompr.') ? 'compr.' : 'incl.';$nom_syn = $note_abbr[2];} else {$notes = '';}return $notes;}public function ajouterSynonymeALaTableEspece($donnees, $nom_sci, $auteur_syn, $annee, $notes, $num_syn) {$num_nom_coste_syn = $donnees['num_nom_coste'].'.'.$num_syn;$this->table_espece[$num_nom_coste_syn] = array('num_nom_coste' => $donnees['num_nom_coste'].'.'.$num_syn,'num_nom_retenu_coste' => $donnees['num_nom_coste'],'num_tax_sup_genre' => $donnees['num_tax_sup_genre'],'rang' => 290,'nom_sci' => $nom_sci,'auteur' => $auteur_syn,'nom_vernaculaire' => '','nom_coste' => $nom_sci,'tome' => $donnees['tome'],'annee' => $annee,'flore_bdnff_num' => '','flore_bdnff_nom_sci' => '','notes' => $notes);}private function recupererDonneesBdnff() {$req = "SELECT * FROM coste_correspondance_bdnff";$res = $this->bdd->recupererTous($req);$total = 0;if ($res) {foreach ($res as $espece_bdnff) {$num_nom_coste = $espece_bdnff['id'];if (isset($this->table_espece[$num_nom_coste])) {$this->table_espece[$num_nom_coste]['flore_bdnff_num'] = $espece_bdnff['num_nom'];$this->table_espece[$num_nom_coste]['flore_bdnff_num_tax'] = $espece_bdnff['num_tax'];$this->table_espece[$num_nom_coste]['flore_bdnff_nom_sci'] = $espece_bdnff['nom_sci'];$total++;} else {$e = "Le num_nom_coste $num_nom_coste de la table de correspondance bdnff n'exsite pas dans la table donneesEspece ";$this->traiterErreur($e);}}} else {$this->traiterErreur('recupererDonneesBdnff() : mauvaise requete');}if ($total != 0) {$this->traiterInfo('Donnees de la bdnff recuperées pour les especes. Total bdnff = '.$total.'\n');}}private function genererNumNom() {$this->table_num_nom = array();$num_nom = 1;foreach($this->indexGpFG as $donneesCle) {$this->table_num_nom[$num_nom] = $donneesCle['num_nom_coste'];$this->indexGpFG[$donneesCle['num_nom_coste']]['num_nom'] = $num_nom;$num_nom++;if (preg_match('/^G[0-9]+/',$donneesCle['num_nom_coste'])) {foreach ($this->table_espece as $donneesEspece) {if ($donneesEspece['num_tax_sup_genre'] == $donneesCle['num_nom_coste']) {$this->table_num_nom[$num_nom] = $donneesEspece['num_nom_coste'];$this->table_espece[$donneesEspece['num_nom_coste']]['num_nom'] = $num_nom;$num_nom++;}}}}if ($this->table_num_nom != array()) $this->traiterInfo('Num_nom generer. Total num_nom = '.count($this->table_num_nom));else $this->traiterErreur( 'erreur dans la génération des num_nom\n');}private function insererNumNomDansTriples() {$table_triples = array();foreach ($this->table_espece as $num_nom_coste => $donnees) {if (isset($donnees['synonyme'])) {$table_triples[] = array('resource' => $donnees['tag'], 'property' => 'num_nom', 'value' => $donnees['num_nom']);}}$this->suppressionTriplesExistants();$this->reinitialiserAutoIncrement('coste_triples');//insertion des triples num_nom en une seule requeteforeach ($table_triples as $triple) {$resource = $this->bdd->proteger($triple['resource']);$property = $this->bdd->proteger($triple['property']);$value = $this->bdd->proteger($triple['value']);$requete = "INSERT INTO coste_triples (resource, property, value) VALUES ($resource,$property ,$value)";$res = $this->bdd->requeter($requete);if ($res) {$this->afficherAvancement('Insertion des triples existants');} else {$this->afficherAvancement('Erreur de insertion des triples existants');}}}private function suppressionTriplesExistants() {$requete = 'DELETE FROM coste_triples '.'WHERE property = "num_nom"'.'AND resource IN ("'.implode(array_keys($this->table_espece), '","').'")';$res = $this->bdd->requeter($requete);if ($res == '') {$this->traiterErreur('Suppression des triples existants : aucun existant');} elseif ($res) {$this->traiterInfo('Suppression des triples existants');} else {$this->traiterErreur('Erreur de suppression des triples existants');}}private function creerTableCoste() {$this->insererGpFG();$this->insererEspeces();ksort($this->table_projet);}private function insererGpFG() {$total = 0;foreach ($this->indexGpFG as $donneesGpFG) {$num_nom = $donneesGpFG['num_nom'];$num_nom_retenu = $donneesGpFG['num_nom'];$num_tax_sup = array_search($donneesGpFG['num_tax_sup_coste'], $this->table_num_nom);$annee = '';$nom_sci = $donneesGpFG['nom_sci'];$rang = $donneesGpFG['rang'];$nom_coste = $donneesGpFG['nom_coste'];$num_nom_coste = $donneesGpFG['num_nom_coste'];$tome = $donneesGpFG['tome'];$page = $donneesGpFG['page'];$genre = '';$nom_supra_generique = '';if ($rang != '220') {$nom_supra_generique = $nom_sci;} else {$genre = $nom_sci;}$this->table_projet[$num_nom] = array('num_nom_retenu' => $num_nom_retenu,'num_tax_sup' => $num_tax_sup,'rang' => $rang,'nom_sci' => $nom_sci,'nom_supra_generique' => $nom_supra_generique,'genre' => $genre,'epithete_infra_generique' => '','epithete_sp' => '','type_epithete' => '','epithete_infra_sp' => '','cultivar_groupe' => '','cultivar' => '','nom_commercial' => '','auteur' => '','annee' => '','biblio_origine' => '','notes' => '','nom_adenddum' => '','basionyme' => '','nom_francais' => '','nom_coste' => $nom_coste,'num_nom_coste' => $num_nom_coste,'tome' => $tome,'page' => $page,'flore_bdnff_num' => '','flore_bdnff_nom_sci' => '','nom_sci_html' => '');$total++;}$this->traiterInfo('Donnees ajoutées à la table pour les groupes, familles et genres. Total donnees = '.$total.'\n');}private function insererEspeces() {$total = 0;foreach ($this->table_espece as $donnees) {$num_nom = $donnees['num_nom'];if (isset($donnees['num_nom_retenu_coste'])) {$num_nom_retenu = array_search($donnees['num_nom_retenu_coste'], $this->table_num_nom); //on recupere le num_nom à partir du num_nom_coste} else {$num_nom_retenu = $donnees['num_nom'];}$num_tax_sup = array_search($donnees['num_tax_sup_genre'], $this->table_num_nom); //on recupere le num_nom à partir du num_nom_coste$nom_sci = $donnees['nom_sci'];$rang = $donnees['rang'];$nom_coste = $donnees['nom_coste'];$num_nom_coste = (preg_match('/^([0-9]+)(?:\.[0-9]{1})?$/', $donnees['num_nom_coste'], $match)) ? $match[1] : $donnees['num_nom_coste'];$tome = $donnees['tome'];$auteur = $donnees['auteur'];$annee = $donnees['annee'];//$synonyme = $donnees['synonyme'];$nom_verna = $donnees['nom_vernaculaire'];$flore_bdnff_num = $donnees['flore_bdnff_num'];$flore_bdnff_nom_sci = $donnees['flore_bdnff_nom_sci'];$notes = (isset($donnees['notes'])) ? $donnees['notes'] : '';$genre = '';$epithete_sp = '';$type_epithete = '';$epithete_infra_sp = '';$biblio_origine = '';if ($num_nom_coste == '1988') $auteur = 'Coste';$this->traiterTypeEpithete($type_epithete, $nom_sci, $genre, $epithete_sp, $epithete_infra_sp);$this->traiterRefBiblio($auteur, $biblio_origine, $num_nom_coste);$this->table_projet[$num_nom] = array('num_nom_retenu' => $num_nom_retenu,'num_tax_sup' => $num_tax_sup,'rang' => $rang,'nom_sci' => $nom_sci,'nom_supra_generique' => '','genre' => $genre,'epithete_infra_generique' => '','epithete_sp' => $epithete_sp,'type_epithete' => $type_epithete,'epithete_infra_sp' => $epithete_infra_sp,'cultivar_groupe' => '','cultivar' => '','nom_commercial' => '','auteur' => $auteur,'annee' => $annee,'biblio_origine' => $biblio_origine,'notes' => $notes,'nom_adenddum' => '','basionyme' => '','nom_francais' => $nom_verna,'nom_coste' => $nom_coste,'num_nom_coste' => $num_nom_coste,'tome' => $tome,'page' => null,'flore_bdnff_num' => $flore_bdnff_num,'flore_bdnff_nom_sci' => $flore_bdnff_nom_sci,'nom_sci_html' => '');$total++;}$this->traiterInfo('Donnees ajoutées à la table pour les especes. Total donnees = '.$total.'\n');}private function traiterRefBiblio(&$auteur, &$biblio_origine, $num_nom_coste) {if (preg_match('/^(.+)\s*(in .+)$/i', $auteur, $match)) {if (isset($match[2]) && !empty($match[2]) && isset($match[1]) && !empty($match[1])) {$auteur = rtrim($match[1], ' ,');$biblio_origine = $match[2];}} elseif (preg_match('/^[^,]+\s*,\s*(.+)$/', $auteur, $match2)) {if (!preg_match('/^\s*non /i', $match2[1]) && !preg_match('/\s*et /i', $match2[1])) {if (isset($match2) && !empty($match2)) {//affichage pour vérfier qu"aucun n'a été oublié//echo $num_nom_coste;//print_r($match2);}}} elseif (preg_match('/^(.+) (Sp[.].*)$/', $auteur, $match3)) {if (isset($match3) && !empty($match3)) {$auteur = rtrim($match3[1], ', ');$biblio_origine = $match3[2];}}}private function traiterTypeEpithete(&$type_epithete, &$nom_sci, &$genre, &$epithete_sp, &$epithete_infra_sp) {if (preg_match('/^([^ ]+) ([^ ]+)(?: ([^ ]+\.) ([^ ]+))?$/', $nom_sci, $match)) {$genre = $match[1];$epithete_sp = $match[2];if (isset($match[3])) {$type_epithete = $match[3];//$this->traiterErreur('Nom : '.$nom_sci);}if (isset($match[4])) $epithete_infra_sp = $match[4];} else {$this->traiterErreur('Erreur pr récupérer la nomenclature pr le nom_sci : '.$nom_sci);}}private function insererTableProjetCoste() {$this->supprimerTableExistante();$this->creerTableCosteSQL();$total = 0;foreach ($this->table_projet as $num_nom => $donnees) {foreach ($donnees as $key => $donn) {if (!in_array($key, array('rang', 'annee', 'tome', 'page'))) {if ($donn == 'NULL') $donn = '';$donnees_2[$key] = $this->bdd->proteger($donn);} else {if ($donn == '') $donn = 'null';$donnees_2[$key] = $donn;}}$req = 'INSERT INTO coste_v0_2 VALUES ('.$num_nom.', '.implode(', ', $donnees_2).')';$res = $this->bdd->requeter($req);if ($res) {$this->afficherAvancement('Insertion des noms dans Coste');} else {$this->afficherAvancement('Erreur d\'insertion des noms dans coste');}}}private function supprimerTableExistante() {$req = 'DROP TABLE coste_v0_2';$res = $this->bdd->requeter($req);if ($res) {$this->traiterInfo('La table coste a été supprimer');}}private function creerTableCosteSQL() {$requete = 'CREATE TABLE IF NOT EXISTS coste_v0_2 (num_nom int(9) NOT NULL DEFAULT 0,num_nom_retenu varchar(9) DEFAULT NULL,num_tax_sup varchar(9) DEFAULT NULL,rang int(3),nom_sci varchar(500) CHARACTER SET utf8 DEFAULT "",nom_supra_generique varchar(500) CHARACTER SET utf8 DEFAULT "",genre varchar(500) CHARACTER SET utf8 DEFAULT "",epithete_infra_generique varchar(500) CHARACTER SET utf8 DEFAULT "",epithete_sp varchar(500) CHARACTER SET utf8 DEFAULT "",type_epithete varchar(500) CHARACTER SET utf8 DEFAULT "",epithete_infra_sp varchar(500) CHARACTER SET utf8 DEFAULT "",cultivar_groupe varchar(500) CHARACTER SET utf8 DEFAULT "",cultivar varchar(500) CHARACTER SET utf8 DEFAULT "",nom_commercial varchar(500) CHARACTER SET utf8 DEFAULT "",auteur varchar(100) CHARACTER SET utf8 DEFAULT "",annee int(4) DEFAULT NULL,biblio_origine varchar(500) CHARACTER SET utf8 NOT NULL DEFAULT "",notes varchar(500) CHARACTER SET utf8 NOT NULL DEFAULT "",nom_addendum varchar(500) CHARACTER SET utf8 NOT NULL DEFAULT "",basionyme varchar(9) CHARACTER SET utf8 NOT NULL DEFAULT "",nom_francais text CHARACTER SET utf8 DEFAULT "",nom_coste varchar(500) CHARACTER SET utf8 DEFAULT "",num_nom_coste varchar(9) CHARACTER SET utf8 DEFAULT "",tome int(1) DEFAULT NULL,page int(4) DEFAULT NULL,flore_bdnff_num varchar(9) DEFAULT NULL,flore_bdnff_nom_sci varchar(500) CHARACTER SET utf8 DEFAULT NULL,nom_sci_html varchar(500) CHARACTER SET utf8 DEFAULT NULL,PRIMARY KEY (num_nom)) ENGINE=MyISAM DEFAULT CHARSET=utf8';$res = $this->bdd->requeter($requete);if ($res) {$this->traiterInfo('La table coste a été crée');} else {$this->traiterErreur('Probleme : la table coste n\'a pas été créée');}}private function creerFichier($fichier, $tab, $chemin = null) {if (!$chemin) {$chemin = Config::get('chemin_test');}$intitule = '';$nom_fichier = fopen($chemin.$fichier, 'w+');foreach ($tab as $key => $val) {foreach ($val as $k => $v) {$intitule .= $k."\t";}fwrite($nom_fichier, trim($intitule)."\n");break;}foreach ($tab as $key => $val) {fwrite($nom_fichier, implode("\t", $val)."\n");}fclose($nom_fichier);}}?>