Génération d'un fichier CSV

Répondre
Insane Bob
le 22/08/2010 à 07:45
Insane Bob
Bonjour à tous,

Malgres de nombreuses recherche je butte toujours sur la génération d'un csv avec php.
Jusqu'a maintenant le csv se genere bien mais j'ai besoin d'une particularité dans les séparateur

En clair :
- J'ai une BBD avec des champs
- Je dois générer un csv avec certain des ces champs mais dans un ordre différent de la BBD
- Je dois mettre chaque champs entre guillemets ex : "txte"
- entre chaque champ je dois ajouter les caractères !# entre chaque champs
- et je dois ajouter des champs vide entre certains des champs.

L'objectif étant de pouvoir utiliser le csv pour une intégration dans une autre BDD externe.

Jusqu'a maintenant j'ai réussi à generer les csv avec les champs de la BDD, les champs vide, et le séparateur!#, mais impossible de mettre les champs entre guillemets.

Merci d'avance pour votre aide
Benoit
LupusMic
le 22/08/2010 à 18:38
LupusMic
(jeca) Ce que tu proposes ne résouds pas son problème. Il a besoin d'un export spécifique, ce que tu proposes est générique.

(Insane Bob) Je pense que tu devrais relire la documentation sur les chaînes de caractère.
<?php printf("\"%s\"\n", $field) ;
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Insane Bob
le 23/08/2010 à 14:08
Insane Bob
Merci LupusMic pour les infos.

En fait voici le code :
Je declare les éléments de mon fichier

while($row = mysql_fetch_object($req))
{
$fichier .= "".$refpass."!#".$row->ref."!#".$row->transac."!#".$row->type."!#".$row->cp."!#".$row->localis."!#!#!#!#!#".$row->prix."!#!#!#!#".$row->honoraire."!#!#!#".$row->nb_piec."!#!#".$row->libel."!#".$row->descr." - ".$row->accroche." - ".$txtdelta."!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#".$urlimage."".$row->img1."!#".$urlimage."".$row->img2."!#".$urlimage."".$row->img3."!#".$urlimage."".$row->img4."!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#".$intercab."!#!#!#!#!#!#!#!#!#!#!!#!#!#!#!#!#!#!#!#!#!!#!#!#!#!#!#!#!#!#!#!!#!#!#!#!#!#!#!#!#!#!!#!#!#!#!#!#!#!#!#!#!!#!#!#!#!#!#!#!#!#!#!!#!#!#!#!#".$row->id_prod."\n";


et ensuite je me sert de la fonction print pour creer le fichier

print $fichier;


Si j'utilise la fonction printf

est ce que c'est ce code que je dois ecrire :

<?php printf("\"%s\"\n", $fichier) ;


Désolé cette question mais je suis vraiment novice en php smiley
Benoit
jeca
le 24/08/2010 à 06:38
jeca
=> LupusMic.
Non, la syntaxe que j'ai proposée n'est pas générique, et je pense qu'un bout de code comme ci-dessous devrait faire la même chose, avec un temps d'exécution éminemment plus court :
<?php
function colonneVide($nb)
{
return str_repeat('\'\',', $nb);
}
//--------------------------------------------------------
//--------------------------------------------------------
//--------------------------------------------------------
//-- valeurs forcées pour voir la tête de la requête -----
$txtdelta = 'texte delta';
$urlimage = '\'url_image/';
$intercab = 'intercab';
//--------------------------------------------------------

//-- il est considèré que le nom des objets correspond ---
//-- au nom des colonnes de la table ---------------------
$separateur = '!#';
$finLigne = '\r\n';
$sql = 'SELECT ref, transac, type, cp, localis, ' .
colonneVide(5) . '
prix, ' .
colonneVide(4) . '
honoraire, ' .
colonneVide(3) . '
nb_piec, ' .
colonneVide(2) . '
libel, CONCAT_WS(\' - \', descr, accroche, \'' . $txtdelta . '\'), ' .
colonneVide(128) .
$urlimage . 'img1\', ' .
$urlimage . 'img2\', ' .
$urlimage . 'img3\', ' .
$urlimage . 'img4\', ' .
colonneVide(44) .
'\'' . $intercab . '\', ' .
colonneVide(136) . '
id_prod
INTO OUTFILE \'leFichier.txt\'
FIELDS TERMINATED BY \'' . $separateur . '\' OPTIONALLY ENCLOSED BY \'"\'
LINES TERMINATED BY \'' . $finLigne . '\'
FROM laTable';
echo $sql;
?>
cordialement
LupusMic
le 28/08/2010 à 10:27
LupusMic
(jeca) Il y a un gros problème : tu présumes que le serveur de base de données est sur la même machine où le script PHP est exécuté. Ce n'est que rarement le cas.

Et puis c'est moche la concaténation :p Ici, tu aurais gagné en lisibilité en utilisant la notation heredoc.

(Insane bob) Non, tu n'as pas compris à quoi sert printf. Cette fonction permet de formater une sortie. Le premier paramètre indique un format qui sera utilisé pour interprété les autres paramètres de printf.

En fait, ce que je souhaitai mettre en lumière dans mon message était la syntaxe de la chaîne de caractère. Vu que tu n'indiquais pas de message d'erreur, j'ai demandé à ma boule de cristal ce qu'elle en pensait. Le plus probable était que tu n'échappais pas correctement les double-quotes dans ta chaîne.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours