Problème import CSV Mysql [Résolu]

Signaler
Messages postés
64
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
8 mars 2012
-
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
-
Bonjour,

Je dois réaliser un import de fichier de fichier CSV assez important (700 000 lignes)
Et je suis soumis à une contrainte assez ennuyeuse.
Le client veut que le séparateur dans le fichier soit "#!", seulement lors de l'utilisation de la fonction fgetcsv(), on ne peut mettre qu'un seul caractère en séparateur.

J'ai pensé utiliser "#" en séparateur et utiliser la fonction str_replace pour remplacer le "!" du "#!" par un autre caractère et éviter des changements de collones non prévus.

Cependant avec plus de 700 000 lignes à réger, je crains que le serveur explose en devant remplacer tant de caractères!
Quelqu'un aurait-il une alternative à me proposer? Une piste ? Quelque chose, un truc

Voici mon code pour l'instant : (il ne gère que la lecture du fichier, je m'occuperai du SQL une fois que je n'aurais plus ce problème de séparateur).

<?php
$row = 1;
$handle =fopen("test.csv", "r");

while (($data = fgetcsv($handle, 1000, "#")) !==FALSE) {
    $num = count($data);
    $row++;
   
    for ($c=0; $c < $num; $c++) {
    $data[$c] = str_replace("!", "AAA", $data[$c]);
       echo $data[$c] . "
\n";       
       
    }
}

fclose($handle);
?>

Merci pour vos réponse !

NIRVANA is never enough ! It' in the spirit !

6 réponses

Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
33
Salut,

pourquoi c'est obligé que ton séparateur sois # ?
tu peus peut être utiliser la fonction explode() :

explode("séparateur", "tableau");

a++

Si la réponse vous convient, pensez : Réponse accepté !
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
33
Re,

la fonction explode supporte les sépparateur de plus d'un caractère !

www.php.net/explode

a++

Si la réponse vous convient, pensez : Réponse accepté !
Messages postés
64
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
8 mars 2012

Bonjour,

C'est à la demande du client comme, ces champs vont être écupérés à partir d'annonces déposées sur un site, il se peut très bien qu'un utilisateur mettent des ";" dans son annonce et ça sèmerai le désordre dans le tableau donc c'est pour cela qe l'on met des caractères eu utilisés comme le # même si à la base c'était #! qui avait été choisi.

Elle fonctionne comment cette fonction explode? Elle supporte les sépérateurs de plus de 1 caractère?

Merci pour vos réponses :)

NIRVANA is never enough ! It' in the spirit !
Messages postés
64
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
8 mars 2012

Bonjour,

J'ai essayé la fonction explode mais pour l'instant je n'arrive pas à afficher ce que je souhaite.

<?php
$row =1;
$nb_ligne =0;
 $nb_champs =0;
 
 $fichier_csv = @fopen("niak2.csv", "r" );
 if($fichier_csv)
 {
  while (!feof($fichier_csv))
  {
 
   $curent_ligne =fgets($fichier_csv, 1000);
   $champs =explode("#!", $curent_ligne);
   $nb_ligne++;
  
   $num = count($champs);
   $row++;
   
        for ($c=0; $c < $num; $c++)
        {
   
               echo $champs[$c] . "
\n";       
       
        }
  
   }
}
?>

Lorsque je lance le script il m'affiche mes lignes avec !# alors qu'il devrait les considérer comme un séparateur.

Merci pour vos réponses

NIRVANA is never enough ! It' in the spirit !
Messages postés
64
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
8 mars 2012

Re,

Honte à moi je me suis trompé j'avais inversé les deux caractères pour le séparateur...
J'avais #! au lieu de !#.
Maintenant ça marche très bien!

Merci encore pour votre aide !

NIRVANA is never enough ! It' in the spirit !
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
33
Ok,

content pour toi !!

De rien !

a++

Si la réponse vous convient, pensez : Réponse accepté !