donnée dans csv sous Excel…

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : donnée dans csv sous Excel…

Re: donnée dans csv sous Excel…

par aspkiddy » 31 août 2010, 16:18

Merci encore et bonne journée

Re: donnée dans csv sous Excel…

par AB » 31 août 2010, 15:48

Comme sites pour débuter il y a phpdebutant.org et le siteduzero.com parmi les plus connus.

Et surtout, pour bien comprendre il est important à chaque fois que l'on emploie une fonction de regarder son utilisation dans le manuel et les exemples d'utilisation qui suivent en bas de page :wink:

A+

Re: donnée dans csv sous Excel…

par aspkiddy » 31 août 2010, 14:54

Bonjour AB,
Un gros merci
Est-ce que tu pourrais me proposer un bon site qui propose auto formation en PHP où je peux mieux apprendre la programmation en PHP ?

Merci encore et bonne journée (en fait, bonne soirée)

Re: donnée dans csv sous Excel…

par AB » 30 août 2010, 18:27

T'en fais quoi de la ligne $pointeur_adresse_memoire = ftell($ouvrir_FD); ? C'est normalement pas nécessaire puisque fopen avec l'option 'a' permet de placer le curseur à la fin du fichier :-k

Ensuite pas la peine d'ouvrir le fichier avant d'avoir à écrire dedans, on l'ouvre juste avant d'écrire dedans. Ton code devrait donc ressembler à ceci (je n'ai gardé que les derniers commentaires utiles)
 <?php 

               //...

               function replace_rn_saut($el)
                   {
                       return (str_replace("\r\n",' ',$el));
                   }
               
               $tab_excel = array();
               
               $tab_excel[] = $var_date;
               $tab_excel[] = $var_votre_nom;
               $tab_excel[] = $var_nom_enfant;
               $tab_excel[] = $var_adresse;
               $tab_excel[] = $var_ville;
               $tab_excel[] = $var_province;
               $tab_excel[] = $var_code_postal;
                
 
               $tab_excel = array_map('utf8_decode',$tab_excel);
              
               $tab_excel = array_map('replace_rn_saut',$tab_excel);
       
                   
              //Définir le fichier qui nous intéresse
              $fichier_data_FD = "data/creation_file.csv";

              //Ouvrir le fichier et place le pointeur de fichier à la fin du fichier ou crée le fichier si inexistant
              $ouvrir_FD = fopen($fichier_data_FD,"a");             

               //fputcsv qui permet d'écrire dans un fichier texte, en formatant le tableau $tab_excel passé en paramètre au format csv et avec ';' comme séparateur de champ (pour avoir le format excel en français )
               fputcsv($ouvrir_FD, $tab_excel, ';');
               
               //Enfin fermer le fichier
               fclose($ouvrir_FD);
               
?>

Re: donnée dans csv sous Excel…

par aspkiddy » 30 août 2010, 17:53

Vraiment super gentil AB,

c'est encore plus clair avec tes commentaires

ce que j'ai fais pour la création du fichier

Code : Tout sélectionner

//Définir le fichier qui nous intéresse $fichier_data_FD = "data/creation_file.csv"; //Ouvrir le fichier //ou en mode "ajouter" à la fin d'info existant //créé si inexistant $ouvrir_FD = fopen($fichier_data_FD,"a"); //La position du pointeur est dans le file $pointeur_adresse_memoire = ftell($ouvrir_FD); // (...) plus loin apres la fucntion replace_rn_saut et utf8_decode //Ecriture le fichier //fputcsv qui permet de formater du texte au format csv fputcsv($ouvrir_FD, $tab_excel, ';'); //Enfin fermer le fichier fclose($ouvrir_FD);
Merci encore

Re: donnée dans csv sous Excel…

par AB » 30 août 2010, 17:36

Merci, je vois que ça avance.

Il y aurait juste trois petites remarques :

Le commentaire :
//remplacement [rn] (lorsqu'utilisateur appuie sur la touche "Entrée") par [--->] pour qu'il n'y a pas de création des colonnes sup dans Excel
devrait être remplacé par :
//remplacement [rn] (lorsqu'utilisateur appuie sur la touche "Entrée") par [ ] pour qu'il n'y a pas de création des colonnes sup dans Excel
car c'est le remplacement défini actuellement par str_replace


Le commentaire :
// array --> Liste des tableaux à exécuter via la fonction de callback .
devrait être remplacé par :
// array --> Création du tableau à envoyer à la fonction fputcsv 
Ce que je veux dire c'est que je ne crée pas un tableau pour appliquer les fonctions de callback avec array_map, mais parce que la fonction fputcsv demande un tableau comme paramètre... Ensuite puisque j'ai un tableau et qu'il me faut appliquer quelques traitements aux éléments du tableau (utf8-decode, str_replace...) j'ai choisi d'utilisé array_map (mais j'aurais pu aussi lister les éléments du tableau et leur appliquer les fonctions identiques).


Avant d'utiliser la fonction fputcsv, il faudrait ouvrir/créer un fichier texte, ex :
//...
//Ouverture ou création du fichier $fichier_a_ouvrir_ou_a_creer.csv
$ouvrir_FD = fopen($fichier_a_ouvrir_ou_a_creer.csv, 'a+');

//fputcsv qui permet de formater du texte au format csv
fputcsv($ouvrir_FD, $tab_excel, ';');
               
//Enfin fermer le fichier
fclose($ouvrir_FD);
Aller, bonne continuation :)

Re: donnée dans csv sous Excel…

par aspkiddy » 30 août 2010, 16:25

Merci pour tes explications AB :D

C'est excellent et meilleur ta solution... =D>

Marche bien...

Voici :

Code : Tout sélectionner

//remplacement [rn] (lorsqu'utilisateur appuie sur la touche "Entrée") par [--->] pour qu'il n'y a pas de création des colonnes sup dans Excel function replace_rn_saut($el) { //callback --> La fonction de rappel à exécuter pour chaque élément de chaque tableau. //str_replace() retourne une chaîne ou un tableau, dont toutes les occurrences de search dans subject ont été remplacées par replace. //des remplacements basiques on n'utilise str_replace au lieu de preg_replace qui est plus complexe. return (str_replace("\r\n",' ',$el)); } // array --> Liste des tableaux à exécuter via la fonction de callback . //http://php.net/manual/fr/function.array-map.php $tab_excel = array(); $tab_excel[] = $var_date; $tab_excel[] = $var_votre_nom; $tab_excel[] = $var_nom_enfant; $tab_excel[] = $var_adresse; $tab_excel[] = $var_ville; $tab_excel[] = $var_province; $tab_excel[] = $var_code_postal; //fonction array_map ----> Applique une fonction sur les éléments d'un tableau //retourne un tableau après leur avoir appliqué la fonction callback //utf8_decode — Convertit une chaîne UTF-8 en ISO-8859-1 $tab_excel = array_map('utf8_decode',$tab_excel); //apliquer la fonction replace_rn_saut $tab_excel = array_map('replace_rn_saut',$tab_excel); //Ecriture le fichier //fputcsv qui permet de formater du texte au format csv fputcsv($ouvrir_FD, $tab_excel, ';'); //Enfin fermer le fichier fclose($ouvrir_FD); ?>
Bonne journée :)

Re: donnée dans csv sous Excel…

par AB » 27 août 2010, 17:52

Bonjour AB et les autres,

Mais je n’arrive pas… Dans les fichiers CSV; les colonnes (ceux que j’ai appliqué la fonction « nettoyage ») sont vides, sans valeur…
Alors à votre avis, comment je peux alléger mon code? ? Je vais surtout faire cela pour apprendre pas pour la vitesse.

Merci
En fait pour alléger ton code il faut en changer tout simplement. Et je t'ai donné un exemple.

Déjà pour apprendre t'aurais pu essayé de comprendre mon code, de le tester et essayer de l'appliquer à tes besoins.

- A noter que pour faire des remplacements basiques on n'utilise pas preg_replace mais str_replace.

- De même quand on a une fonction native comme fputcsv qui permet de formater du texte au format csv, et que l'on veut un format csv, ben on essai de l'employer plutôt que de bidouiller pour reproduire son fonctionnement.

C'est que j'ai mis en application dans mon exemple, qui utilise par ailleurs la fonction array_map qu'il est intéressant de connaître.

Donc si tu veux apprendre ...

Laisse tomber tes preg_replace qui n'ont rien à faire ici et utilises fputcsv pour formater des fichiers csv !

Apprendre à programmer c'est utiliser les fonctions que l'on a à sa disposition dans le meilleur contexte et le plus simplement possible. Et ton code est à l'opposer de ces principes. Il te reste à apprendre à ne pas continuer d'essayer d'améliorer un code qui n'est pas parti sur de bonnes bases, mais plutôt d'essayer d'en changer :wink:

Re: donnée dans csv sous Excel…

par aspkiddy » 27 août 2010, 15:24

Bonjour AB et les autres,

J'ai fait mon fonction autrement...

Code : Tout sélectionner

unction nettoyage($chaine) { $var_fonction_nettoyage =""; if (isset($_POST[$var_fonction_nettoyage])) { { $tb_tableau_nettoyage = array(); $tb_tableau_nettoyage[0] = '/;/'; $tb_tableau_nettoyage[1] = '/\r\n/'; $tb_tableau_replacer = array(); $tb_tableau_replacer[0] = '.,'; $tb_tableau_replacer[1] = '--->'; $var_fonction_nettoyage = preg_replace($tb_tableau_nettoyage, $tb_tableau_replacer, $_POST[$var_fonction_nettoyage]); $var_fonction_nettoyage = utf8_decode($var_fonction_nettoyage); } return $var_fonction_nettoyage; } } fputs($ouvrir_FD, utf8_decode($var_date).';'.nettoyage($var_votre_nom).';'.nettoyage($var_nom_enfant).';'.nettoyage($var_adresse).';'.nettoyage($var_ville).';'.utf8_decode($var_province).';'.utf8_decode($var_code_postal).';'."\n");

Mais je n’arrive pas… Dans les fichiers CSV; les colonnes (ceux que j’ai appliqué la fonction « nettoyage ») sont vides, sans valeur…
Alors à votre avis, comment je peux alléger mon code? ? Je vais surtout faire cela pour apprendre pas pour la vitesse.

Merci

Re: donnée dans csv sous Excel…

par AB » 24 août 2010, 21:14

Tu pourrais utiliser fputcsv comme dans mon exemple, puisque cette fonction est prévue pour formater des lignes csv
function replace_rn($el)
{
return (str_replace("\r\n",' ',$el));
}

$tab_excel = array();

$tab_excel[] = $var_ville;
$tab_excel[] = $var_nom;
$tab_excel[] = $var_prenom;
$tab_excel[] = $var_pays;

$tab_excel = array_map('utf8_decode',$tab_excel);
$tab_excel = array_map('replace_rn',$tab_excel);


$fp = fopen($ouvrir_FD, 'a+');
       
fputcsv($fp, $tab_excel, ';');
               
fclose($fp);
Sinon pour tout mettre en majuscule il vaut mieux commencer par enlever les accent puis ensuite utiliser la fonction strtoupper
Pour enlever les accents tu peux utiliser le tableau de remplacement de la fonction "Nettoie_nom_fichier" contenu dans cette classe (vers la fin du premier message)

Re: donnée dans csv sous Excel…

par aspkiddy » 24 août 2010, 16:07

Bonjour,
Merci pour vos aides…
J’ai réglé mon problème avec la fonction preg_remplace comme vous voyez ci-dessous…
Du coup, j’ai trois questions :

1- Comment je peux optimiser mon code qui se trouve dans la partie de fonction preg_replace ?


Code : Tout sélectionner

// fonction preg_replace // replacer [;] par [.,] // remplacer [\r\n] par [--->] //[\r\n] dans excel, c'est un saut à la ligne $var_ville = preg_replace( "/;/", ".,", $var_ville ); $var_ville = preg_replace( "/\r\n/", "--->", $var_ville ); $var_nom = preg_replace( "/;/", ".,", $var_nom ); $var_nom = preg_replace( "/\r\n/", "--->", $var_nom ); $var_prenom = preg_replace( "/;/", ".,", $var_prenom ); $var_prenom = preg_replace( "/\r\n/", "--->", $var_prenom ); $var_pays = preg_replace( "/;/", ".,", $var_pays ); $var_pays = preg_replace( "/\r\n/", "--->", $var_pays ); //ecriture fichier csv fputs($ouvrir_FD, utf8_decode($var_ville).';'.utf8_decode($var_nom).';'.utf8_decode($var_prenom).';'.utf8_decode($var_pays).';'."\n");


2- est-ce qu’il y a un script php ou javascript qui empêche d’écrire ou transformer les minuscules en majuscule dans un champ de texte ( input / textbox) ?
3- est ce qu’il y a un script php ou javascript qui transforme les accents dans un champ de texte ( input / textbox) ?

Bonne journée

Re: donnée dans csv sous Excel…

par stealth35 » 23 août 2010, 16:47

Oui mais cela demande que mysql ait les droits d'écriture dans un fichier et ce n'est quasiment jamais le cas sur un mutualisé.
Perso j'ai du me résoudre à faire une routine php cf php-debutant/les-accents-sous-php-dans- ... ml#p334580
Enfin si tu y arrives ce serait intéressant de connaître la manip :)
oui en mutu c'est raté, en distant aussi :wink:

Re: donnée dans csv sous Excel…

par AB » 23 août 2010, 04:34

avec mysql tu peux direct enregistrer les données dans un CVS si tu veux :wink:
C'est à dire ?
avec INTO OUTFILE

ca marcher avec n'importe quelle requête
SELECT * FROM truc WHERE machin='blabla' INTO OUTFILE 'monfichier.csv'
par contre si on veux un dossier particulier il faudra le mettre le path en absolue

on peu régler différente option (séparateur et compagnie)
http://dev.mysql.com/doc/refman/5.0/fr/select.html

je sais pas si l'option LOCAL (au cas ou le serveur est distant) marche par contre (je vais faire un test)
Oui mais cela demande que mysql ait les droits d'écriture dans un fichier et ce n'est quasiment jamais le cas sur un mutualisé.
Perso j'ai du me résoudre à faire une routine php cf php-debutant/les-accents-sous-php-dans- ... ml#p334580
Enfin si tu y arrives ce serait intéressant de connaître la manip :)

Re: donnée dans csv sous Excel…

par stealth35 » 22 août 2010, 23:58

avec mysql tu peux direct enregistrer les données dans un CVS si tu veux :wink:
C'est à dire ?
avec INTO OUTFILE

ca marcher avec n'importe quelle requête
SELECT * FROM truc WHERE machin='blabla' INTO OUTFILE 'monfichier.csv'
par contre si on veux un dossier particulier il faudra le mettre le path en absolue

on peu régler différente option (séparateur et compagnie)
http://dev.mysql.com/doc/refman/5.0/fr/select.html

je sais pas si l'option LOCAL (au cas ou le serveur est distant) marche par contre (je vais faire un test)

Re: donnée dans csv sous Excel…

par AB » 22 août 2010, 21:34

avec mysql tu peux direct enregistrer les données dans un CVS si tu veux :wink:
C'est à dire ?