Page 1 sur 1
Fichier CSV parser
Posté : 21 sept. 2010, 17:40
par pitou26140
Bonjour,
Je voudrais créer un tableau associatif à partir d'un fichier CSV de la forme :
Attribut UC Intitule Couleur Echelle min Echelle max Nomenclature Classes
Couleur Grande classe de sols
Couleur 700 Sols minéraux bruts ( lithosols/régosols) fee0e0 SMB
Couleur 701 Sols peu évolués d'apport fea4a4 SPEA
Couleur 702 rendzines fe4141 REN
Couleur 703 Sols bruns calcaires e00000 SBC
Couleur 705 Vertisols 630000 VER
Couleur 706 Sols isohumiques a21b87 SIH
Couleur 707 Sols brunifiès a21b87 SBR
Couleur 708 Sols fersialitiques b07145 SFE
Couleur 709 Sols Halomorphes 44974 SHA
Couleur 710 Sols hydromorphes bb5631 SHY
Couleur 711 Unités complexes de sol 820e2e UCS
Couleur 712 Zones urbaines a5a5a5 ZU
Couleur 713 Plans d'eau (barrages, lacs, etc…) 14a4ab PLE
Couleur 714 Lits d'oueds 00ffff O
afin de créer un tableau associatif de type :
Field Content
Attribut Couleur
UC 706
Intitule Sols isohumiques
Couleur a21b87
Echelle min
Echelle max
Nomenclature SIH
Classes
pouvez vous m'aider à créer ce tableau s'il vous plait c pour insérer dans un base de données postgres
Re: Fichier CSV parser
Posté : 21 sept. 2010, 18:16
par stealth35
tu peux direct le faire sans avoir besoin de faire un tableau et compagnie
COPY table FROM '/chemin/vers/truc.csv' WITH CSV;
Re: Fichier CSV parser
Posté : 22 sept. 2010, 09:46
par pitou26140
ça pourra m'aider mais bref comment créé un tableau multidimensionnel à partir de ce fichier csv
Re: Fichier CSV parser
Posté : 22 sept. 2010, 16:51
par stealth35
ça pourra m'aider mais bref comment créé un tableau multidimensionnel à partir de ce fichier csv
pour l'insérer dans ta base après ?
Re: Fichier CSV parser
Posté : 23 sept. 2010, 10:19
par pitou26140
A partir du fichier csv, je dois extraire les données classées en un tableau multimensionnel, les intégrés dans un tableau associatif pour etre par la suite intégré dans une base de données postgres.
Pour l'instant j'ai créé un tableau multimensionnel et apres je suis bloqué.
voici mon code :
$i=0;
$tableau = array();
//on ouvre le fichier csv pour lire son contenu
$fic = fopen("./fichier.csv",'r');
//je traite les éléments de la premieres lignes
while ($data = fgetcsv($fic,1024, ";")) {
$num = count($data);
for ( $c=0; $c<$num; $c++ )
{
//expressions régulières
if(preg_match('`^#`',$data[$c])) continue;
if(preg_match('`^[[:space:]]`',$data[$c])) continue;
$tableau[$c][$i] = explode('"',$data[$c]);
//on met dans un tableau associatif les valeurs correspondant à leurs colonnes
//$tableau_classes[]=array("uc"=>$tableau[0][$i],"intitule"=>$tableau[1][$i],"couleur"=>$tableau[2][$i]);
//print_r($tableau[$c][$j]);
}
$i++;
}
Re: Fichier CSV parser
Posté : 23 sept. 2010, 12:53
par pitou26140
Je viens de m'apercevoir comme mon tableau multidimensionnel ne fonctionne pas.
j'obtiens ça comme réponse à partir du code suivant :
//on ouvre le fichier csv pour lire son contenu
$fic = fopen("./nabe_carte_agricole.csv",'r');
//tantque le tableau data est composé du fichier csv
while ($data = fgetcsv($fic,1024, ";")) {
//on compte le nombre de lignes dans le tableau
$num = count($data);
// on fait un parcours du tableau ligne par ligne
for ( $c=0; $c<$num; $c++ )
{
//expressions régulières
//si on a un # au début de la ligne, on poursuit la boucle
if(preg_match('`^#`',$data[$c])) continue;
//si on a un espace en début de ligne on poursuit la boucle
if(preg_match('`^[[:space:]]`',$data[$c])) continue;
//pour chaque ligne on sépare les éléments
$tableau[$i] = explode('"',$data[$c]);
print_r($tableau[$i]);
Réponse :
Array ( [0] => Attribut [1] => UC [2] => [3] => Intitule [4] => [5] => Couleur [6] => [7] => Echelle min [8] => [9] => Echelle max [10] => [11] => Nomenclature [12] => [13] => Classes [14] => )
Array ( [0] => Couleur [1] => Grande classe de sols [2] => )
Array ( [0] => Couleur [1] => 700 [2] => [3] => Sols minéraux bruts ( lithosols/régosols) [4] => [5] => fee0e0 [6] => [7] => SMB [8] => )
Re: Fichier CSV parser
Posté : 23 sept. 2010, 17:27
par stealth35
mais utilise COPY de prosgres pourquoi tu t'embêtes ?
Re: Fichier CSV parser
Posté : 23 sept. 2010, 18:37
par pitou26140
le problème c'est que je peux avoir des fichiers csv différents c'est pour ça
Re: Fichier CSV parser
Posté : 23 sept. 2010, 18:42
par stealth35
le problème c'est que je peux avoir des fichiers csv différents c'est pour ça
diffèrent a quelle niveau ? (pas les mêmes colonnes ?)
Re: Fichier CSV parser
Posté : 23 sept. 2010, 18:53
par pitou26140
oui voila
Re: Fichier CSV parser
Posté : 24 sept. 2010, 02:50
par stealth35
oui voila
mais pour la même table ?
Re: Fichier CSV parser
Posté : 24 sept. 2010, 10:09
par pitou26140
Mon fichier csv va me permettre d'insérer des données dans plusieurs tables de ma base de données
Re: Fichier CSV parser
Posté : 24 sept. 2010, 18:02
par stealth35
avec COPY tu peux choisir les columns que tu souhaites insèrer dans un table