IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

fputcsv enclosure : guillemets indésirables


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Points : 19
    Points
    19
    Par défaut fputcsv enclosure : guillemets indésirables
    Bonjour,

    je rencontre un problème avec le paramètre "enclosure" de fputcsv.
    Si je mets rien ou ceci """, j'ai un guillemet en début en fin de ligne, si je mets ceci " " j'ai un espace en début et fin de ligne et à l'intérieur de la ligne les espaces sont doublés.

    j'ai surement loupé quelques chose. https://www.php.net/manual/en/function.fputcsv.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?php
     
     /* Fichier à supprimer */
       $fichier = "termine.csv";
     
     if( file_exists ($fichier))
         unlink( $fichier ) ;
     
    $filename = "all.csv";
    $fileRead = fopen($filename, 'r');
    $fileWrite = fopen("termine.csv", "w");
    $sep = "|";
     
      if (!$fileRead || !$fileWrite) {
        echo "Erreur d'ouverture du fichier de lecture et/ou d'écriture avec $filename.";
     
      }
     
     
      fputs($fileWrite,  $data= chr(0xEF) . chr(0xBB) . chr(0xBF));
     
      while (($data = fgetcsv($fileRead, 0, "|")) !== FALSE) {
     
     
     
       // le commencement des colonne est 0]);
        fputcsv($fileWrite, array(. $data[54].  $sep. $data[57]. $sep . $data[28]  . ".jpg" ) ,"|", "\"", "\\", "\n");
     
      }
     
      fclose($fileWrite);
      fclose($fileRead);
     
    echo "copie terminée merci"; 
      ?>
    exemple d'une ligne: "SUISSE|10BR15560R150T-5050|3286341380019|43|74,77|BRIDGESTONE|155/60R 15 74T TL T-005|non|été|155|60|15|74|T|TURANZA T005||C|A|070B|5,7|6263.jpg"

    j'ai aussi essayé cela comme paramètre enclosure "\t" et là j'ai un escape.

    merci d'avance pour votre aide.

  2. #2
    Membre éclairé
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 362
    Points : 738
    Points
    738
    Par défaut
    Bonjour,

    Tu ne précise pas clairement le résultat que tu attends.

    La syntaxe de ton tableau de donnée ne semble pas correcte.
    Les éléments d'un tableau sont normalement séparés par une virgule (et tu peux utiliser la syntaxe courte [] à la place de array()) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fputcsv($fileWrite, [$data[0], $data[54], $data[57], $data[28] . ".jpg"], "|", "\"", "\\", "\n");
    Si tu ne veux aucun guillemets dans ton fichier csv, tu peux éventuellement remplacer l'utilisation de fputcsv par fputs pour écrire directement les données dans le fichier.

  3. #3
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 903
    Points : 6 685
    Points
    6 685
    Par défaut
    Citation Envoyé par doublemetre Voir le message
    je rencontre un problème avec le paramètre "enclosure" de fputcsv.
    Si je mets rien ou ceci """, j'ai un guillemet en début en fin de ligne, si je mets ceci " " j'ai un espace en début et fin de ligne et à l'intérieur de la ligne les espaces sont doublés.
    Oui, mais la question est: À quoi tu t'attends au juste?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Pytet Voir le message
    Tu ne précise pas clairement le résultat que tu attends.
    ce que j'attends c'est ceci 10BR15560R150T-5050|13800|38,00|72,48.jpg et ce que j'obtiens c'est ceci "10BR15560R150T-5050|13800|38,00|72,48.jpg" si j'utilise ton exemple de code j'obtiens ceci 10BR15560R150T-5050,13800,"38,00","72,48.jpg" dans mes valeurs j'ai des virgules ou des points c'est pour cela que j'utlise ceci pour séparer |

    j'espère m'être mieux exprimé , merci pour vos conseils

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 903
    Points : 6 685
    Points
    6 685
    Par défaut
    C'est que tu as oublié quelque chose dans le code de Pytet (de préciser le séparateur peut-être) car ça fonctionne très bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $data = [
        0 => '10BR15560R150T-5050',
        28 => '72,48',
        54 => '13800',
        57 => '38,00'
    ];
     
    $fp = fopen('php://memory', 'r+');
     
    fputcsv($fp, [$data[0], $data[54], $data[57], $data[28] . '.jpg'], '|');
     
    rewind($fp);
     
    echo fgets($fp);
    // 10BR15560R150T-5050|13800|38,00|72,48.jpg
     
    fclose($fp);
    demo

    Inutile de préciser les autres paramètres de fputcsv puisque tu souhaites les valeurs par défaut pour le caractère d'échappement, le caractère de protection et la séquence de saut de ligne.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    C'est que tu as oublié quelque chose dans le code de Pytet (de préciser le séparateur peut-être) car ça fonctionne très bien [. . .]
    Ok cela fonctionne bien, mais si ma valeur à un espace exemple 54 => 'abc xyz', alors j'ai ceci 10BR15560R150T-5050|"abc xyz"|38,00|72,48.jpg

    merci beaucoup pour votre aide.

  7. #7
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 903
    Points : 6 685
    Points
    6 685
    Par défaut
    Oui, et il en sera de même pour les champs contenant la tabulation, le retour chariot, la nouvelle ligne, le séparateur, le caractère de protection (qui sera alors doublé sauf s'il est échappé) et le caractère d'échappement. Mais ça ne porte pas à conséquence puisque l'opération inverse (l'extraction des champs du csv) les supprime.

    demo

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Points : 19
    Points
    19
    Par défaut
    ok mais après il n'y a pas d'opération inverse, l'import se fait via un programme qui reprend les "", il faut que mon fichier soit comme cela 10BR15560R150T-5050|abc xyz|38,00|72,48.jpg j'ai 2 valeurs qui ont des espaces.

  9. #9
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 242
    Points : 8 521
    Points
    8 521
    Billets dans le blog
    17
    Par défaut
    L'import ne supporte donc pas le CSV, ou il est mal paramétré.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Points : 19
    Points
    19
    Par défaut
    Un grand merci à tous, oui l'import se passe bien maintenant et il ne tient pas compte des guillemets.

    je passe en résolu

  11. #11
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 903
    Points : 6 685
    Points
    6 685
    Par défaut
    Si ton but est d'exporter des données vers Excel (comme le laisse à penser ton ajout de BOM) ou autre tableur, regarde ce que te propose le tableur en question comme assistant d'importation, tu y trouveras peut-être ton salue. Sinon autant produire directement un fichier xlsx avec php via la bibliothèque PHPSpreadSheet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. enlever les double quote d'un fichier
    Par zerocoolyoussef dans le forum Linux
    Réponses: 3
    Dernier message: 08/09/2009, 14h18
  2. [Mail] Mail() et les quotes/guillemets.
    Par Bouarf77 dans le forum Langage
    Réponses: 3
    Dernier message: 05/06/2006, 20h23
  3. [MySQL] Recherche FULL TEXT IN BOOLEAN MODE et les Quotes
    Par GarGamel55 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 23/01/2006, 20h01
  4. Formulaires : problème avec les slashes et les quotes
    Par GarGamel55 dans le forum Langage
    Réponses: 1
    Dernier message: 12/10/2005, 15h59
  5. Réponses: 2
    Dernier message: 30/08/2004, 14h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo