460 |
delphine |
1 |
<?php
|
|
|
2 |
// Encodage : UTF-8
|
|
|
3 |
// +-------------------------------------------------------------------------------------------------------------------+
|
|
|
4 |
/**
|
|
|
5 |
* Traitement des fichiers de la banque de données SOPHY pour insertion
|
|
|
6 |
*
|
|
|
7 |
* Description : classe permettant d'insérer les flores nécessaires à l'étude des données issues de SOPHY.
|
|
|
8 |
* Avant d'utiliser cette classe nettoyer les fichiers pour ne garder que les lignes à insérer.
|
|
|
9 |
* Utilisation : php script.php insertionFlore -a test
|
|
|
10 |
*
|
|
|
11 |
* @category PHP 5.3
|
|
|
12 |
* @package phytosocio
|
|
|
13 |
//Auteur original :
|
|
|
14 |
* @author Delphine CAUQUIL <delphine@tela-botanica.org>
|
|
|
15 |
* @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org)
|
|
|
16 |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
|
|
|
17 |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2
|
|
|
18 |
* @version $Id$
|
|
|
19 |
*/
|
|
|
20 |
// +-------------------------------------------------------------------------------------------------------------------+
|
|
|
21 |
class Insertionflore extends Script {
|
|
|
22 |
|
|
|
23 |
protected $dao;
|
|
|
24 |
protected $dossier;
|
|
|
25 |
protected $flore;
|
|
|
26 |
protected $parametres_autorises = array(
|
|
|
27 |
'-n' => array(true, true, 'Nom du fichier ou du dossier à traiter'));
|
|
|
28 |
|
|
|
29 |
public function executer() {
|
|
|
30 |
include_once dirname(__FILE__).'/bibliotheque/FloreDao.php';
|
|
|
31 |
Config::charger(dirname(__FILE__).'/sophy.ini');
|
|
|
32 |
$this->dossier = Config::get('dossierDonneesSophy').'FLORE/';
|
|
|
33 |
$this->dao = new FloreDao();
|
|
|
34 |
// Récupération de paramètres
|
|
|
35 |
// Lancement de l'action demandée
|
|
|
36 |
$cmd = $this->getParametre('a');
|
|
|
37 |
switch ($cmd) {
|
|
|
38 |
case 'florenbi' : // fournier
|
|
|
39 |
$this->executerFlorenbi();
|
|
|
40 |
break;
|
|
|
41 |
case 'bdnff' : // bdnff
|
|
|
42 |
$this->executerBdnff();
|
|
|
43 |
break;
|
|
|
44 |
case 'listepla' : // fournier/bdnff
|
|
|
45 |
$this->executerListePla();
|
|
|
46 |
break;
|
|
|
47 |
case 'floeur' : // flora europea
|
|
|
48 |
$this->executerFloeur();
|
|
|
49 |
break;
|
|
|
50 |
case 'bryo' : // bryophyte
|
|
|
51 |
$this->executerBryo();
|
|
|
52 |
break;
|
|
|
53 |
case 'syntri' : //syntri : numéro complémentaire
|
|
|
54 |
$this->executerSyntri();
|
|
|
55 |
break;
|
|
|
56 |
case 'ciff' : // CIFF CIFF/BDNFF
|
|
|
57 |
$this->executerCiff();
|
|
|
58 |
break;
|
|
|
59 |
case 'donneebb' : // Num_nom num_tax bdnff
|
|
|
60 |
$this->executerDonneebb();
|
|
|
61 |
break;
|
|
|
62 |
case 'codefr' : // CODEFR94
|
|
|
63 |
$this->executerCodefr();
|
|
|
64 |
break;
|
|
|
65 |
default :
|
|
|
66 |
$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd));
|
|
|
67 |
}
|
|
|
68 |
}
|
|
|
69 |
|
|
|
70 |
// +-------------------------------------------------------------------------------------------------------------------+
|
|
|
71 |
// Traitement du fichier flore florenbi qui contient tous codes, numéro et nom fournier
|
|
|
72 |
// /opt/lampp/bin/php cli.php sophy/insertionflore -a florenbi -n ./../donnees/sophy/2010-12-02/FLORE/FLORENBI
|
|
|
73 |
private function executerFlorenbi() {
|
|
|
74 |
$nomFichier = $this->dossier.'FLORENBI';
|
|
|
75 |
if (file_exists($nomFichier) === true) {
|
|
|
76 |
if ( $fichierOuvert = fopen($nomFichier, 'r') ) {
|
|
|
77 |
$nom = '';
|
|
|
78 |
while ($ligne = fgets($fichierOuvert)) {
|
|
|
79 |
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)) {
|
|
|
80 |
// si le rang taxonomique est inf à 4 (subsp et var)
|
|
|
81 |
if ($champs[3] < 4) {
|
|
|
82 |
$flore[$champs[1]] = $champs[4];
|
|
|
83 |
$nom = trim($champs[4]);
|
|
|
84 |
} else {
|
|
|
85 |
$flore[$champs[1]] = $nom." ".$champs[4];
|
|
|
86 |
}
|
|
|
87 |
}
|
|
|
88 |
}
|
|
|
89 |
$info = $this->dao->integrerFlore($flore, 'fournier');
|
|
|
90 |
$this->traiterErreur($info);
|
|
|
91 |
}
|
|
|
92 |
fclose($fichierOuvert);
|
|
|
93 |
} else {
|
|
|
94 |
$this->traiterErreur("Le fichier {$fichier} n'existe pas.");
|
|
|
95 |
}
|
|
|
96 |
}
|
|
|
97 |
|
|
|
98 |
// +-------------------------------------------------------------------------------------------------------------------+
|
|
|
99 |
// Traitement du fichier flore florenbi qui contient tous codes, numéro et nom fournier
|
|
|
100 |
// /opt/lampp/bin/php cli.php sophy/insertionflore -a florenbi -n ./../donnees/sophy/2010-12-02/FLORE/FLORENBI
|
|
|
101 |
private function executerBdnff() {
|
|
|
102 |
$nomFichier = $this->dossier.'bdnffv5.csv';
|
|
|
103 |
if (file_exists($nomFichier) === true) {
|
|
|
104 |
$this->dao->chargerDonnees($nomFichier, 'sophy_bdnff');
|
|
|
105 |
} else {
|
|
|
106 |
$this->traiterErreur("Le fichier {$nomFichier} n'existe pas.");
|
|
|
107 |
}
|
|
|
108 |
}
|
|
|
109 |
// +-------------------------------------------------------------------------------------------------------------------+
|
|
|
110 |
// Traitement du fichier flore listePla qui contient numéro de fournier, nom de fournier, numéro bdnff, nom bdnff
|
|
|
111 |
// /opt/lampp/bin/php -d memory_limit=2048M cli.php insertionFlore -a listepla -n ./../doc/jeux_test/FLORE/LISTEPLA.csv
|
|
|
112 |
private function executerListePla() {
|
|
|
113 |
// Parcours le fichier .csv et enregistre chaque ligne dans un tableau.
|
|
|
114 |
$nomFichier = $this->dossier.'LISTEPLA.csv';
|
|
|
115 |
if ($nomFichier && file_exists($nomFichier) ){
|
|
|
116 |
$extensionFichier = strtolower(strrchr($nomFichier, '.'));
|
|
|
117 |
if ($extensionFichier === ".csv"){
|
|
|
118 |
$file = new SplFileObject($nomFichier);
|
|
|
119 |
$file->setFlags(SplFileObject::SKIP_EMPTY);
|
|
|
120 |
$i = 0;
|
|
|
121 |
echo "Traitement de LISTEPLA : ";
|
|
|
122 |
while (!$file->eof()){
|
|
|
123 |
$flore = $this->transformerFournierBdnff($file->fgetcsv());
|
|
|
124 |
echo str_repeat(chr(8), ( strlen( $i ) + 1 ))."\t".$i++;
|
|
|
125 |
}
|
|
|
126 |
echo "\n";
|
|
|
127 |
//$info = $this->dao->integrerFlore($this->flore['bdnff'], 'bdnff');
|
|
|
128 |
$info .= $this->dao->integrerFlore($this->flore['correspondance'], 'fournier_bdnff');
|
|
|
129 |
$this->traiterErreur($info);
|
|
|
130 |
} else {
|
|
|
131 |
$this->traiterErreur("Le fichier $nomFichier n'est pas au format csv.");
|
|
|
132 |
}
|
|
|
133 |
} else {
|
|
|
134 |
$this->traiterErreur("Le fichier $nomFichier n'existe pas.");
|
|
|
135 |
}
|
|
|
136 |
}
|
|
|
137 |
|
|
|
138 |
private function transformerFournierBdnff($ligne_csv){
|
|
|
139 |
//$this->flore['bdnff'][$ligne_csv[5]] = $ligne_csv[6];
|
|
|
140 |
$this->flore['correspondance'][$ligne_csv[3]] = $ligne_csv[5];
|
|
|
141 |
}
|
|
|
142 |
// +-------------------------------------------------------------------------------------------------------------------+
|
|
|
143 |
// Traitement du fichier flore floeur.bis qui contient numéro et nom de flora europea
|
|
|
144 |
// /opt/lampp/bin/php -d memory_limit=2048M cli.php insertionFlore -a floeur -n ./../doc/jeux_test/FLORE/FLOEUR.BIS
|
|
|
145 |
private function executerFloeur() {
|
|
|
146 |
$nomFichier = $this->dossier.'FLOEUR.BIS';
|
|
|
147 |
if (file_exists($nomFichier) === true) {
|
|
|
148 |
if ( $fichierOuvert = fopen($nomFichier, 'r') ) {
|
|
|
149 |
$i = 0;
|
|
|
150 |
while ($ligne = fgets($fichierOuvert)) {
|
|
|
151 |
if (preg_match('/^\s[\d\s]{9}[\d\sA-Z]\s([\d\s]{4}\d)\s(.{71})[\s\d]{2}/', $ligne, $champs)) {
|
|
|
152 |
$this->flore[$champs[1]] = trim($champs[2]);
|
|
|
153 |
}
|
|
|
154 |
}
|
|
|
155 |
$info = $this->dao->integrerFlore($this->flore, 'flora_europea');
|
|
|
156 |
$this->traiterErreur($info);
|
|
|
157 |
}
|
|
|
158 |
fclose($fichierOuvert);
|
|
|
159 |
} else {
|
|
|
160 |
$this->traiterErreur("Le fichier {$nomFichier} n'existe pas.");
|
|
|
161 |
}
|
|
|
162 |
}
|
|
|
163 |
|
|
|
164 |
// +-------------------------------------------------------------------------------------------------------------------+
|
|
|
165 |
// Traitement du fichier flore codebry qui contient numéro et nom des bryophytes
|
|
|
166 |
// /opt/lampp/bin/php -d memory_limit=2048M cli.php insertionFlore -a bryo -n ./../doc/jeux_test/FLORE/codebry.txt
|
|
|
167 |
private function executerBryo() {
|
|
|
168 |
$nomFichier = $this->dossier.'codebry.txt';
|
|
|
169 |
if (file_exists($nomFichier) === true) {
|
|
|
170 |
if ( $fichierOuvert = fopen($nomFichier, 'r') ) {
|
|
|
171 |
$i = 0;
|
|
|
172 |
while ($ligne = fgets($fichierOuvert)) {
|
|
|
173 |
if (preg_match('/^\s([\d\s]{4})\s[\d\s][\d\s]{4}\s{2}\d\s*(.*)\s[\d\s]{4}/', $ligne, $champs)) {
|
|
|
174 |
if ($champs[1] != 0) {
|
|
|
175 |
$this->flore[$champs[1]] = trim($champs[2]);
|
|
|
176 |
}
|
|
|
177 |
}
|
|
|
178 |
}
|
|
|
179 |
$info = $this->dao->integrerFlore($this->flore, 'bryophyte');
|
|
|
180 |
$this->traiterErreur($info);
|
|
|
181 |
}
|
|
|
182 |
fclose($fichierOuvert);
|
|
|
183 |
} else {
|
|
|
184 |
$this->traiterErreur("Le fichier {$nomFichier} n'existe pas.");
|
|
|
185 |
}
|
|
|
186 |
}
|
|
|
187 |
// +-------------------------------------------------------------------------------------------------------------------+
|
|
|
188 |
// Traitement du fichier flore Syntri qui contient numéro de fournier, numéro syntri, nom syntri
|
|
|
189 |
// /opt/lampp/bin/php -d memory_limit=2048M cli.php insertionFlore -a syntri -n ./../doc/jeux_test/FLORE/SYNTRI.TXT
|
|
|
190 |
private function executerSyntri() {
|
|
|
191 |
$nomFichier = $this->dossier.'SYNTRI.TXT';
|
|
|
192 |
if (file_exists($nomFichier) === true) {
|
|
|
193 |
if ( $fichierOuvert = fopen($nomFichier, 'r') ) {
|
|
|
194 |
$i = 0;
|
|
|
195 |
while ($ligne = fgets($fichierOuvert)) {
|
|
|
196 |
if (preg_match('/^(\d+)\s{2}\d\s([A-Z,\-\'\.()\s]+[A-Z,\-\'\.()])\s+([\d\s]+)$/', trim($ligne), $champs)) {
|
|
|
197 |
$syntri = preg_split('/\s+/', $champs[3]);
|
|
|
198 |
if (count($syntri) == 3) {
|
|
|
199 |
$num = $syntri[1];
|
|
|
200 |
} elseif (count($syntri) == 1){
|
|
|
201 |
$num = $syntri[0];
|
|
|
202 |
}
|
|
|
203 |
if (isset($flore['correspondance'][$num])) {
|
|
|
204 |
$flore['syntri'][$num] = $flore['syntri'][$num].$champs[2];
|
|
|
205 |
} else {
|
|
|
206 |
$flore['correspondance'][$num] = $champs[1];
|
|
|
207 |
$flore['syntri'][$num] = $champs[2];
|
|
|
208 |
}
|
|
|
209 |
$i++;
|
|
|
210 |
}
|
|
|
211 |
}
|
|
|
212 |
$info = $this->dao->integrerFlore($flore['syntri'], 'syntri');
|
|
|
213 |
$info .= $this->dao->integrerFlore($flore['correspondance'], 'syntri_fournier');
|
|
|
214 |
$this->traiterErreur($info);
|
|
|
215 |
}
|
|
|
216 |
fclose($fichierOuvert);
|
|
|
217 |
} else {
|
|
|
218 |
$this->traiterErreur("Le fichier {$nomFichier} n'existe pas.");
|
|
|
219 |
}
|
|
|
220 |
}
|
|
|
221 |
|
|
|
222 |
|
|
|
223 |
// /opt/lampp/bin/php -d memory_limit=2048M cli.php insertionFlore -a ciff -n ./../doc/jeux_test/FLORE/ciff.txt
|
|
|
224 |
private function executerCiff() {
|
|
|
225 |
$nomFichier = $this->dossier.'ciff.txt';
|
|
|
226 |
if (file_exists($nomFichier) === true) {
|
|
|
227 |
if ( $fichierOuvert = fopen($nomFichier, 'r') ) {
|
|
|
228 |
$i = 0;
|
|
|
229 |
while ($ligne = fgets($fichierOuvert)) {
|
|
|
230 |
if (preg_match('/^(\d*)\t([A-Za-z].*)\t(\d*)\t\d*/', $ligne, $champs)) {
|
|
|
231 |
$flore['ciff'][$champs[1]] = $champs[2];
|
|
|
232 |
if ($champs[3] != '') {
|
|
|
233 |
$flore['correspondance'][$champs[1]] = $champs[3];
|
|
|
234 |
}
|
|
|
235 |
}
|
|
|
236 |
}
|
|
|
237 |
$info = $this->dao->integrerFlore($flore['ciff'], 'ciff');
|
|
|
238 |
$info .= $this->dao->integrerFlore($flore['correspondance'], 'ciff_bdnff');
|
|
|
239 |
$this->traiterErreur($info);
|
|
|
240 |
}
|
|
|
241 |
fclose($fichierOuvert);
|
|
|
242 |
} else {
|
|
|
243 |
$this->traiterErreur("Le fichier {$nomFichier} n'existe pas.");
|
|
|
244 |
}
|
|
|
245 |
}
|
|
|
246 |
// +-------------------------------------------------------------------------------------------------------------------+
|
|
|
247 |
// Traitement du fichier flore donneebb.tri qui contient le numero tax t numero nomenclatural de la bdnff
|
|
|
248 |
// num_tax||num_nom||num_nom_retenu||?||nom
|
|
|
249 |
// /opt/lampp/bin/php -d memory_limit=2048M cli.php insertionFlore -a donneebb -n ./../doc/jeux_test/FLORE/donneebb.tri
|
|
|
250 |
private function executerDonneebb() {
|
|
|
251 |
$nomFichier = $this->dossier.'donneebb.tri';
|
|
|
252 |
if (file_exists($nomFichier) === true) {
|
|
|
253 |
if ( $fichierOuvert = fopen($nomFichier, 'r') ) {
|
|
|
254 |
while ($ligne = fgets($fichierOuvert)) {
|
|
|
255 |
if (preg_match('/^([\d\s]{4}\d)\|([\d\s]{5})\|([\d\s]{5})\|/', $ligne, $champs)) {
|
|
|
256 |
if (!isset($this->flore[$champs[1]])) {
|
|
|
257 |
$this->flore[$champs[2]]['num_tax'] = $champs[1];
|
|
|
258 |
if (trim($champs[3]) != '') {
|
|
|
259 |
$this->flore[$champs[2]]['num_nom_retenu'] = $champs[3];
|
|
|
260 |
} else {
|
|
|
261 |
$this->flore[$champs[2]]['num_nom_retenu'] = $champs[2];
|
|
|
262 |
}
|
|
|
263 |
}
|
|
|
264 |
}
|
|
|
265 |
}
|
|
|
266 |
$info = $this->dao->ajouterColonnes($this->flore, 'sophy_bdnff');
|
|
|
267 |
$this->traiterErreur($info);
|
|
|
268 |
}
|
|
|
269 |
fclose($fichierOuvert);
|
|
|
270 |
} else {
|
|
|
271 |
$this->traiterErreur("Le fichier {$nomFichier} n'existe pas.");
|
|
|
272 |
}
|
|
|
273 |
}
|
|
|
274 |
// +-------------------------------------------------------------------------------------------------------------------+
|
|
|
275 |
// Traitement du fichier flore codefr94 qui contient numéro et nom codefr94
|
|
|
276 |
// /opt/lampp/bin/php -d memory_limit=2048M cli.php insertionFlore -a ciff -n ./../doc/jeux_test/FLORE/CODEFR94
|
|
|
277 |
private function executerCodefr() {
|
|
|
278 |
$nomFichier = $this->dossier.'CODEFR94';
|
|
|
279 |
if (file_exists($nomFichier) === true) {
|
|
|
280 |
if ( $fichierOuvert = fopen($nomFichier, 'r') ) {
|
|
|
281 |
$i = 0;
|
|
|
282 |
while ($ligne = fgets($fichierOuvert)) {
|
|
|
283 |
if (preg_match('/^([\d\s]{5})[\d\s]{7}(.*)/', $ligne, $champs)) {
|
|
|
284 |
$flore[$champs[1]] = trim($champs[2]);
|
|
|
285 |
}
|
|
|
286 |
}
|
|
|
287 |
$info = $this->dao->integrerFlore($flore, 'codefr94');
|
|
|
288 |
$this->traiterErreur($info);
|
|
|
289 |
}
|
|
|
290 |
fclose($fichierOuvert);
|
|
|
291 |
} else {
|
|
|
292 |
$this->traiterErreur("Le fichier {$nomFichier} n'existe pas.");
|
|
|
293 |
}
|
|
|
294 |
}
|
|
|
295 |
}
|