batch/1.1/old/chercheDC.php
2013-06-19 08:24:49 +00:00

239 lines
7.6 KiB
PHP

#!/usr/bin/php -c/var/www/batch/config/php_batch_sd.ini
<?php
error_reporting(E_ALL ^ E_NOTICE);
/** @todo Si MAJ en annule et remplace prévoir les manips SQL suivantes :
** Création d'une table insee.tmp sans aucun index
** A la fin du chargement construire les index
** Si pas d'erreur :
** 1. detruire insee
** 2. Renommer insee.tmp en insee
**/
set_time_limit(0);
$heureDebut=TIME_LISIBLE;
$dateJour=DATE;
$dateJourFormat=substr(DATETIME,0,4).'-'.substr(DATETIME,4,2).'-'.substr(DATETIME,6,2);
$j=0;
$argv=$_SERVER['argv'];
if ($_SERVER['argc']==1) die('Usage : '.basename($argv[0]). " [OPTION]... FICHIER
Charger un fichier CSV dans une base de données avec création de la table qui aura le nom du fichier chargé..
Options disponibles:
Les arguments obligatoires pour les options de formes longues le sont aussi
pour les options de formes courtes.
-s=CHAR séparateur de champs (virgule, point-virgule*, /t=tabulation, etc...)
-c=CHAR caractère encadrant les zones alphanumériques (inopérationnel)
(*): Valeurs par défaut !
");
for ($i=1; isset($argv[$i]); $i++) {
if (substr($argv[$i],0,1)=='-') {
switch (substr($argv[$i],1,1)) {
case 's': $separator=substr($argv[$i],3); break;
case 'c': $chaine=substr($argv[$i],3); break;
default: die('Option '. $argv[$i] . " inconnue !".EOL);
}
} else {
$fichier_csv[$j]=$argv[$i];
$j++;
}
}
$db_name='jo';
$iDb=new WDB($db_name);
if ($separator=='/t') {
$separator="\t";
echo "séparateur = tabulation\n";
} elseif (!isset($separator) || $separator=='') {
$separator=';';
echo "séparateur = '$separator'\n";
}
else
echo "séparateur = '$separator'\n";
// Mise à jour de la table PARAM
// -----------------------------
// 2 - pour la date et l'heure d'exécution du traitement en cours
/* $tabDataToUpdate=array('VALEUR'=>DATETIME,
'CLE'=>'INSEE_MAJ_ENCOURS');
$iparam->setParamValeur($tabDataToUpdate);
*/
echo date ('Y/m/d - H:i:s') . " - Début du traitement".EOL;
flush();
for ($nbFichiers=0; isset($fichier_csv[$nbFichiers]); $nbFichiers++)
{
$fp=fopen($fichier_csv[$nbFichiers], 'r');
if (!$fp) {
echo date ('Y/m/d - H:i:s')." - Impossible d'ouvrir le fichier : ".$fichier_csv[$nbFichiers]." !".EOL;
/* $tabDataToUpdate=array( 'NUM'=>$numScript,
'DATE_JOUR'=>$dateJour,
'HEURE_DEBUT'=>$heureDebut,
'HEURE_FIN'=>$heureFin,
'CODE_RETOUR'=>0,
'NB_MAIL'=>1,
'RESUME_EXEC'=>"Impossible d'ouvrir le fichier n°$nbFichiers à traiter : $nomFichier.");*/
echo date ('Y/m/d - H:i:s') . " - Fin du traitement".EOL;
exit();
}
$nbLignes=0;
echo date ('Y/m/d - H:i:s')." - Début du traitement du fichier ". $fichier_csv[$nbFichiers] ."...".EOL;
flush();
while (($data = fgetcsv($fp, 3000, $separator)) !== FALSE)
{
//echo "\nLigne #$nbLignes:\n";
$nomIn=addslashes(trim($data[0]));
$nom=trim(addslashes(substr($nomIn,0,5)));
//$prenom='';
$prenom=addslashes(trim($data[1]));
//////$tabTmp=explode('/',$data[2]);
$tabTmp=explode('/',$data[2]);
$dateNaiss=$tabTmp[2].'-'.$tabTmp[1].'-'.$tabTmp[0];
$nbLignes++;
$tabTmp=$iDb->select('insee_dc',
"nom, prenom, sexe, dateNaiss, comInsee, comLib, pays, dateDeces, comInsee2, dateInsert,
MATCH(nom) AGAINST ('$nom') AS ScoreNom, MATCH(prenom) AGAINST ('$prenom') AS ScorePrenom
/* MATCH(nom, prenom) AGAINST ('$nomIn') AS ScoreNomPrenom */ ",
"1 AND MATCH(nom) AGAINST ('$nom') AND MATCH(prenom) AGAINST ('$prenom')
/* AND MATCH(nom,prenom) AGAINST ('$nomIn')
AND dateNaiss='$dateNaiss' */
AND nom LIKE '$nom%'
ORDER BY ScoreNom DESC, ScorePrenom DESC
", true);
if (isset($tabTmp[0])) {
if (count($tabTmp)==1) $codeRet=1;
else $codeRet=2;
foreach ($tabTmp as $i=> $res) {
echo "$ref;$nomIn;$prenom;$dateNaiss;$codeRet;". $res['nom'].';'.
$res['prenom'].';'.
$res['dateNaiss'].';'.
$res['comInsee'].';'.
$res['comLib'].';'.
$res['sexe'].';'.
$res['pays'].';'.
$res['dateDeces'].';'.
$res['comInsee2'].';'.
$res['dateInsert'].';'.EOL;
}
} else {
echo "$ref;$nomIn;$prenom;$dateNaiss;0;".EOL;
}
/*
if ($nbLignes==1)
{ // L'entête contient la structure du fichier
// On compte le nombre de colonnes du fichier
$nbColonnes=count($data);
$sql="CREATE TABLE IF NOT EXISTS `$nom_table` (";
for($i=0; $i<$nbColonnes; $i++) {
$sql.='`'.$data[$i].'` LONGTEXT,';
$tabTailles[$i]=0;
$champ[$i]=$data[$i];
}
$sql=substr($sql,0,strlen($sql)-1); // Retrait de la dernière virgule
//$sql.="NOM LONGTEXT, PRENOM LONGTEXT, NUSAGE LONGTEXT) TYPE = MYISAM COMMENT = '$comment'";
$sql.=") TYPE = MYISAM COMMENT = '$comment'";
//echo $sql;
if ($iDb->query($sql))
echo date ('Y/m/d - H:i:s')." - Création de la table $nom_table OK...".EOL;
else {
echo $iDb->getLastError().EOL;
die(date ('Y/m/d - H:i:s')." - Impossible de créer la table $nom_table !".EOL."Requête SQL = $sql".EOL);
}
flush();
continue;
}
die();
$tabDataToInsert=array();
for($i=0; $i<$nbColonnes; $i++) {
if ($i==1) {
$tabM=explode(' ', $data[$i]);
if (strlen($tabM[0])<=2) {
$nom=$tabM[0].' '.$tabM[1];
// unset($tabM[0]);
unset($tabM[1]);
}
else $nom=$tabM[0];
unset($tabM[0]);
$tabM=preg_split('/( NEE | NE )/i', implode(' ', $tabM));
$prenom=$tabM[0];
$usage=$tabM[1];
$tabDataToInsert=array_merge($tabDataToInsert, array('NOM'=>$nom, 'PRENOM'=>$prenom, 'NUSAGE'=>$usage));
} else
$tabDataToInsert=array_merge($tabDataToInsert, array($champ[$i]=>$data[$i]));
if (strlen($data[$i])>$tabTailles[$i])
$tabTailles[$i]=strlen($data[$i]);
}
//print_r($tabDataToInsert);
$ret=$iDb->insert($nom_table, $tabDataToInsert);
if ($ret!=1) {
echo date ('Y/m/d - H:i:s') . " - ERREUR à l'insertion de la ligne n°$i : ". implode(';', $data) ." !".EOL;
flush();
}
unset($tabDataToInsert);*/
}
fclose ($fp);
die();
// On réduit la taille des colonnes au max de chaque champ
for($i=0; $i<$nbColonnes; $i++)
{
//$tabTailles[$i]=strlen($data[$i]);
if ($tabTailles[$i]<256) {
$sql="ALTER TABLE `$nom_table` CHANGE `".$champ[$i]."` `".$champ[$i]."` VARCHAR(".$tabTailles[$i].") NULL DEFAULT NULL ";
echo $sql;
if ($iDb->query($sql))
echo date ('Y/m/d - H:i:s')." - Taille du champ $i (". $champ[$i] .") passée à ". $tabTailles[$i] ."...".EOL;
else
echo date ('Y/m/d - H:i:s')." - Impossible de modifier la taille du champ $i (". $champ[$i] .") à ". $tabTailles[$i] ." !".EOL;
flush();}
}
echo 'Tailles max / champ:'.EOL;
print_r($tabTailles);
}
echo date ('Y/m/d - H:i:s')." - Fin du traitement.".EOL;
die();
function ecrireFichier($fichier,$texte){
$fp = fopen($fichier, "a");
fwrite($fp, $texte."\r\n");
fclose ($fp);
}
function valideSiret($SIRET) {
if (!is_numeric($SIRET))
return false;
$somme=0;
for ($i=0; $i<=12; $i+=2) { // Traitement PAIR
$var_tmp=(string)(2*((integer)substr($SIRET,$i,1)));
$som_tmp=0;
for($j=0;$j<strlen($var_tmp);$j++)
$som_tmp+=(integer)substr($var_tmp,$j,1);
$somme+=$som_tmp;
}
for ($i=1; $i<=13; $i+=2) // Traitement IMPAIR
$somme+=(integer)substr($SIRET,$i,1);
if ((integer)($somme/10)!=($somme/10))
return false;
return true;
}
?>