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

Requêtes MySQL Discussion :

[CSV] Exporter une table dont les colonnes peuvent contenir des retour-chariots ?


Sujet :

Requêtes MySQL

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 123
    Par défaut [CSV] Exporter une table dont les colonnes peuvent contenir des retour-chariots ?
    Bonjour,

    Je ne trouve pas comment exporter en CSV une table dont une colonne peut contenir des retour-chariots puisque c'est un article. Les données sont en UTF8.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM posts INTO OUTFILE '/tmp/posts.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '¤' LINES TERMINATED BY '\n';
    J'utilise volontairement le caractère ¤ pour distinguer les fins de ligne dans l'article des fins d'enregistrements, avec l'idée de retransformer ce caractère par des CRLF une fois les données importées.

    Dans le CSV, chaque fin de ligne dans la colonne se termine en Â\n, c.a.d. C20A.

    Pour la mise en page, j'ai besoin de garder ces retour-chariots dans les articles.

    Comment faire pour exporter des colonnes qui contiennent des retour-chariots ?

    Merci.

    --

    Edit: j'ai beau essayer, l'export CSV ne fonctionne pas. J'ai contourné en éditant le fichier CSV (remplacé \LF par LF, \" par ""), puis import dans SQLite, puis export pour lecture dans LibreOffice (ouf!)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    .import --csv --schema temp posts.csv _import
    .mode csv
    .header on
    .output posts.SQLite.csv
    select * from _import;
    .quit

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 370
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 370
    Billets dans le blog
    17
    Par défaut
    Je teste ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    with dataset as (
    	values 
    		row (123, 'Simple texte'),
    		row (234, 'Texte\r\navec\r\nretour\r\nà\r\nla\r\nligne'),
    		row (345, 'Simple texte')
    )
    select all * from dataset
    into outfile '/var/lib/mysql-files/test-csv-crlf.csv'
    columns terminated by ',' enclosed by '"' escaped by ''
    ;
    Et j'obtiens cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    seb@srv:/var/lib/mysql-files$ cat test-csv-crlf.csv 
    "123","Simple texte"
    "234","Texte
    avec
    retour
    à
    la
    ligne"
    "345","Simple texte"
    MySQL 8.0.32

  3. #3
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    7 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 7 344
    Par défaut
    Salut fredtheman.

    Un line feed a la valeur "0A". Un carriage return a la valeur "0D".

    Selon le contexte ou tu te trouves (windows, linux ou mac), la gestion de la fin de ligne n'est pas la même.

    a) Windows : CR + LF.
    b) Linux : LF.
    b) Mac : CR. Il parait maintenant qu'il faut mettre LF.

    Si par exemple, tu ouvres sous linux, par "vi", un fichier créé pour windows, tu remarqueras que tu as un "^M" en fin de ligne.
    Cela signifie que tu as un "^M" en trop, je voulais dire un CR (carriage return) en trop.

    Je suis sous Windows et j'utilise Notepad++ comme éditeur de texte.
    Il y a une fonctionnalité qui permet de convertir cette fin de ligne selon le contexte.

    Le mieux est de convertir dans vos colonnes, votre caractère CR en "\r" et LF en "\n", si besoin, comme dans l'exemple donné par Séb.

    J'ai repris l'exemple de Seb. que j'ai dû adapté à windows :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    use base;
    
    with dataset as (values row (123, 'Simple texte'),
                            row (234, 'Texte\navec\nretour\nà\nla\nligne'),
                            row (345, 'Simple texte')
                    )
    select all * from dataset
    into outfile 'E:\\30.MySql\\01.Exercices\\Ex_24\\fichier.txt'
    FIELDS TERMINATED BY ','
             ENCLOSED BY '"'
     LINES TERMINATED BY '\r\n';
    Et bien sûr, j'obtiens le même résultat que Seb.

    Cordialement.
    Artemus24.
    @+

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/07/2017, 19h02
  2. Réponses: 3
    Dernier message: 08/05/2011, 13h51
  3. Réponses: 2
    Dernier message: 06/05/2010, 16h55
  4. Réponses: 3
    Dernier message: 16/04/2008, 09h39
  5. Créer une table dont les noms de colonnes sont des paramètres
    Par Mythrandil dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 08/09/2007, 16h08

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