Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 11 | Rev 24 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 11 Rev 22
Line 1... Line 1...
1
<?php
1
<?php
2
/** Exemple lancement:
2
/** Exemple lancement:
3
 * /opt/lampp/bin/php -d memory_limit=3500M ~/web/nripts/cli.php nvjfl -a indexer -f /home/delphine/Documents/nvjfl_version_2007-10-29/NomsVernaculaires-2007-10-29/NomsVernaculaires-2007-10-29.csv
3
 * /opt/lampp/bin/php -d memory_limit=3500M ~/web/eflore-projets/scripts/cli.php nvjfl
-
 
4
 * 		-a indexer
-
 
5
 * 		-f /home/jpm/eflore/donnees/nvjfl/2007-10-29/nvjfl_v2007-10-29.csv
-
 
6
 * 		-table nvjfl_v2007
4
 * Options :
7
 * Options :
5
 * -f : indiquer le chemin du fichier à analyser
8
 * -f : indiquer le chemin du fichier à analyser
6
*/
9
*/
7
class Nvjfl extends Script {
10
class Nvjfl extends Script {
Line -... Line 11...
-
 
11
 
-
 
12
	private $bdd = null;
-
 
13
	private $nomsIndex = array();
-
 
14
	private $numeroIndex = 1;
8
 
15
 
9
	protected $parametres_autorises = array(
16
	protected $parametres_autorises = array(
-
 
17
		'-f' => array(true, null, 'Chemin du fichier à analyser'),
-
 
18
		'-test' => array(false, 10, 'Permet de tester le script sur un jeux réduit de données (indiquer le nombre de lignes).'),
Line 10... Line 19...
10
	'-f' => array(true, null, 'Chemin du fichier à analyser'));
19
		'-table' => array(true, true, 'Nom de la table où insérer les données.'));
11
 
20
 
-
 
21
	public function executer() {
12
	public function executer() {
22
		// Lancement de l'action demandée
13
		// Lancement de l'action demandée
23
		try {
14
		$cmd = $this->getParametre('a');
24
			$cmd = $this->getParametre('a');
15
	    switch ($cmd) {
25
		    switch ($cmd) {
16
			case 'indexer' :
26
				case 'indexer' :
17
				$this->indexer();
27
					$this->indexer();
18
				break;
28
					break;
-
 
29
				default :
-
 
30
					$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd));
-
 
31
			}
19
			default :
32
		} catch (Exception $e) {
20
				$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd));
33
			$this->traiterErreur($e->getMessage());
-
 
34
		}
-
 
35
    }
21
		}
36
    /**
22
    }
37
     * Créer un index pour un nom identique la clé primaire est composée de cet index + num_taxon + langue
23
 
38
     */
-
 
39
	private function indexer() {
24
	private function indexer() {
40
		$fichierOuvert = $this->ouvrirFichier($this->getParametre('f'));
25
		// créer un index pour un nom identique la clé primaire est composée de cet index + num_taxon + langue
41
		$this->bdd = new Bdd();
26
		$nomFichier = $this->getParametre('f');
42
		$donnees = $this->analyserFichier($fichierOuvert);
-
 
43
		fclose($fichierOuvert);
-
 
44
		foreach ($donnees as $donnee) {
-
 
45
			$requete = 'INSERT INTO '.$this->getParametre('table').' VALUES ('.implode(', ', $donnee).')';
-
 
46
			$this->bdd->requeter($requete);
27
		if ($nomFichier) {
47
 
-
 
48
			$this->afficherAvancement("Insertion des noms vernaculaires dans la base de données");
-
 
49
			if ($this->stopperLaBoucle()) {
-
 
50
				break;
-
 
51
			}
-
 
52
		}
-
 
53
		echo "\n";
-
 
54
	}
28
			if (file_exists($nomFichier) === true) {
55
 
29
				if ( $fichierOuvert = fopen($nomFichier, 'r') ) {
56
	private function stopperLaBoucle() {
-
 
57
		$stop = false;
-
 
58
		static $ligneActuelle = 1;
30
					$this->bdd = new Bdd();
59
		if ($nbreLignesATester = $this->getParametre('test')) {
-
 
60
			if ($nbreLignesATester == $ligneActuelle++) {
-
 
61
				$stop = true;
-
 
62
			}
-
 
63
		}
-
 
64
		return $stop;
-
 
65
	}
-
 
66
 
-
 
67
	private function analyserFichier($fichierOuvert) {
31
					$nom_precedent = '';
68
		$donnees = array();
32
					$index = 0;
69
		$entetesCsv = fgets($fichierOuvert);
-
 
70
		while ($ligneCsv = fgets($fichierOuvert)) {
-
 
71
			$champs = explode("\t", trim($ligneCsv));
-
 
72
			$nomVernaculaire = $champs[2];
-
 
73
			$indexCourrant = $this->getIndexNomVernaculaire($nomVernaculaire);
-
 
74
			$champs = array_merge(array($indexCourrant), $champs);
-
 
75
			$donnees[] = $this->protegerValeursDesChamps($champs);
33
					while ($ligne = fgets($fichierOuvert)) {
76
 
34
						$champs = explode(';', $ligne);
77
			$this->afficherAvancement("Analyse du fichier des noms vernaculaires");
-
 
78
			if ($this->stopperLaBoucle()) {
-
 
79
				break;
-
 
80
			}
35
						if ($champs[3] != $nom_precedent) {
81
		}
36
							$index ++;
82
		echo "\n";
-
 
83
		return $donnees;
-
 
84
	}
37
							$nom_precedent = $champs[3];
85
 
38
						}
86
	private function getIndexNomVernaculaire($nomVernaculaire) {
-
 
87
		$indexCourrant = null;
39
						$champs[0] = $index;
88
		if (array_key_exists($nomVernaculaire, $this->nomsIndex) == false) {
-
 
89
			$this->nomsIndex[$nomVernaculaire] = $this->numeroIndex++;
-
 
90
		}
-
 
91
		$indexCourrant = $this->nomsIndex[$nomVernaculaire];
-
 
92
		return $indexCourrant;
-
 
93
	}
40
						$this->bdd->requeter('INSERT INTO '.Config::get('bdd_table').' VALUES ('.implode(', ',$champs).');');
94
 
41
					}
95
	private function ouvrirFichier($chemin) {
-
 
96
		$fichierOuvert = false;
-
 
97
		if ($chemin) {
-
 
98
			if (file_exists($chemin) === true) {
42
					fclose($fichierOuvert);
99
				$fichierOuvert = fopen($chemin, 'r');
43
				} else {
100
				if ($fichierOuvert == false) {
44
					$this->traiterErreur("Le fichier $nomFichier n'a pas pu être ouvert.");
101
					throw new Exception("Le fichier $chemin n'a pas pu être ouvert.");
45
				}
102
				}
46
			} else {
103
			} else {
-
 
104
				throw new Exception("Le fichier $chemin est introuvable.");
-
 
105
			}
-
 
106
		} else {
-
 
107
			throw new Exception("Aucun chemin de fichier n'a été fourni.");
-
 
108
		}
-
 
109
		return $fichierOuvert;
-
 
110
	}
-
 
111
 
-
 
112
	private function protegerValeursDesChamps($champs) {
-
 
113
		$champsProteges = array();
-
 
114
		for ($i = 0; $i < 9; $i++) {
47
				$this->traiterErreur("Le fichier $nomFichier est introuvable.");
115
			$valeur = isset($champs[$i]) ? $champs[$i] : '';
-
 
116
			$champsProteges[] = $this->bdd->proteger($valeur);
48
			}
117
		}
49
		}
118
		return $champsProteges;
50
	}
119
	}
51
}
120
}