Recupérer les champs d'un fichier csv pour les mettre dans une bdd

hannao Messages postés 98 Date d'inscription mercredi 5 novembre 2003 Statut Membre Dernière intervention 26 janvier 2012 - 24 avril 2009 à 20:30
hannao Messages postés 98 Date d'inscription mercredi 5 novembre 2003 Statut Membre Dernière intervention 26 janvier 2012 - 27 avril 2009 à 16:08
Bonjour a tous,

voilà je vais tenter de vous expliquez mon pb qui pour certains je suis sur sera très simple, mais j'avoue ramer grave.
J'ai un fichier test.csv qui contient "2" "une fois" "des galettes, pour manger".
Pour faire le csv j'ai choisi : jeu de caractère Unicode utf8, séparateur de champs tab et séparateur de texte des guillement car en réalité les trois champs sont très long ,et comporte des virgules etc...
Je veut récupérer chaqu'un de ces champs dans une variables.
1. j'ouvre le fichier et le lit jusqu'a sa fin

$handle = fopen ("test.csv","r");

    if ($handle) {
        {
        while (!feof($handle)) {
            $buffer = fgets($handle, 4096);
            //echo $buffer;
            split('[{tab}""]',$buffer);
            //echo $buffer[0];
            echo $buffer[1];
            //echo $buffer[2];
            //echo $buffer[3];
            }
        fclose($handle);
        }
    }

voilà ce que j'ai essayé j'ai aussi essayé explode mais rien n'y fait je pense que je m'y prend très mal et que mes synthaxe sont tous simplement nul alors si quelqu'un peut m'expliquer le procéder. le but étant par la suite de remplir la bdd avec chaque champs (les 3).

9 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
24 avril 2009 à 21:05
Salut,

Renseigne toi sur fgetcsv

Cordialement,

Kohntark -
0
hannao Messages postés 98 Date d'inscription mercredi 5 novembre 2003 Statut Membre Dernière intervention 26 janvier 2012
24 avril 2009 à 21:24
merci je vais jeter un coup d'oeil sinon pas de grosse faute dans le script j'ai l'impression de ne pas avoir compris l'utilisation de split
0
hannao Messages postés 98 Date d'inscription mercredi 5 novembre 2003 Statut Membre Dernière intervention 26 janvier 2012
24 avril 2009 à 21:38
<tt class="parameter">ok fgetcsv me sort bien la ligne  mais comment extraire les champs un par un ?

</tt>
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
24 avril 2009 à 22:41
  je ne vais pas faire ton code hein
Montre ce que tu as fait.

Kohntark -
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
hannao Messages postés 98 Date d'inscription mercredi 5 novembre 2003 Statut Membre Dernière intervention 26 janvier 2012
24 avril 2009 à 22:58
oui t'as raison je reviens demain et je te montre ça merci
0
lefter Messages postés 63 Date d'inscription lundi 7 juin 2004 Statut Membre Dernière intervention 16 mai 2009
24 avril 2009 à 23:11
Remplace déjà
split('[{tab}""]',$buffer);
par :
$buffer=split("\t",$buffer);

ou par fgetcsv :
<?php
$ligne = 0;
$handle = fopen("
test.csv
", "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    $ligne++;
    for ($c=0; $c < $num; $c++) {
        echo 'Col ['.$ligne.','.$c.']='.$data[$c] . "
\n";
    }
}
fclose($handle);
?>



Lefter
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
24 avril 2009 à 23:38
Plutôt comme ça, non ?

$ligne = 0;
$handle = fopen("test.csv", "r");
while (($data = fgetcsv($handle, 1000, chr(9),'"')) !== FALSE) {
    $ligne++;
    $num = count($data);

    for ($c=0; $c < $num; $c++) {
      echo 'Col ['.$ligne.', '.$c.'] = '.$data[$c].'
';
    }
}

Cordialement,

Kohntark -
0
hannao Messages postés 98 Date d'inscription mercredi 5 novembre 2003 Statut Membre Dernière intervention 26 janvier 2012
25 avril 2009 à 16:20
merci pour le code me reste à comprendre comment mettre ça dans la base de données, j'imagine valeur champs du tableau [] requete insert into id puis autre champs etc ....
0
hannao Messages postés 98 Date d'inscription mercredi 5 novembre 2003 Statut Membre Dernière intervention 26 janvier 2012
27 avril 2009 à 16:08
Voilà j'ai fini mon code grace a votre aide merci je le met si ça peut intéresser quelqu'un.
C'est un code pour joomla 1.5
re merci encore pour votre aide

public function importContent(){
        
        // ouverture du fichier a voir ou on le place ?
        $handle = fopen("WEBmetadatasV3_090409.csv", "r");
        $ligne = 0;
        
        // lecture ligne à ligne
        while (($data = fgetcsv($handle, 0, chr(9),'"')) !== FALSE) {
        $ligne++;
    
        // faire correspondre les champs du tableau à une variable (mais là ça ne sert pas)
        //list($id, $title, $alais, etc...) = $data;

        // enlève le premier champs qui correspond à l'id, et qui est inutile
        $id = array_shift($data);

    
        // construit la requête //
        $db->setQuery ("
        INSERT INTO 'jos_content' (
        'title',
        'alias',
        'title_alias',
        'introtext',
        'fulltext',
        'state',
        'sectionid',
        'mask',
        'catid',
        'created',
        'creatd_by',
        'created_by_alias',
        'modified',
        'modified_by',
        'checked_out',
        'checked_out_time',
        'publish_up',
        'publish_down',
        'images',
        'urls',
        'attribs',
        'version',
        'parentid',
        'ordering',
        'metakey',
        'metadesc',
        'access',
        'hits',
        'metadata'
        )     VALUE ("._q($data).");";
        // insert dans la base de données
        $db->query();

        }
    // échappe les chaînes de caractère pour insertion dans une requête et sépare un tableau par des ,
    // http://doc.spip.org/@_q
        function _q ($a) {
        return (is_numeric($a)) ? strval($a) :
            (!is_array($a) ? ("'" . addslashes($a) . "'")
             : join(",", array_map('_q', $a)));

        }
    }
0
Rejoignez-nous