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

C# Discussion :

Simple quote et format CSV


Sujet :

C#

  1. #1
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut Simple quote et format CSV
    Hello,

    Sur le projet sur lequel je bosse, il est possible de générer des exports CSV. On peut configurer pas mal d'options, dont le séparateur de texte, qui peut prendre la forme de simple ou de double quotes, ou rien. Donc on peut avoir ceci (cas 1) :
    "aaa";"bbb";"ccc";
    ou (cas 2)
    'aaa';'bbb';'ccc';
    ou (cas 3)
    aaa;bbb;ccc;
    Dans le cas où on utilise les double quotes (cas 1), le RFC 4180 spécifie que si le texte contient un double quote, il faut l'échapper en rajoutant un double quote avant comme ceci :
    "aaa""aaaa";
    En revanche rien n'est mentionné concernant les simple quotes (cas 2).

    Cela signifie-t-il que les simple quotes ne devraient pas être utilisées en tant que délimiteur de texte ?
    Faut-il utiliser le même principe pour échapper les simple quotes que pour échapper les double quotes ?

    J'utilise le code suivant pour échapper les double quotes :
    Code C# : 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
    private const string DOUBLE_QUOTE = "\"";
    private const string ESCAPED_DOUBLE_QUOTE = "\"\"";
    private static char[] CHARS_TO_ESCAPE = { ',', '"', ';' };
     
    public static string Escape(string text)
    {
    	if (text.Contains(DOUBLE_QUOTE))
    	{
    		text = text.Replace(DOUBLE_QUOTE, ESCAPED_DOUBLE_QUOTE);
    	}
     
    	if (text.IndexOfAny(CHARS_TO_ESCAPE) > -1)
    	{
    		text = DOUBLE_QUOTE + text + DOUBLE_QUOTE;
    	}
     
    	return text;
    }
    Etant donné que j'ai un tableau de char pour stocker les caractères à échapper, comment y inclure le simple quote ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    en toute logique, si on utilise les simple quote au lieu de la double quote, on double la simple quote lorsqu'elle est comprise dans un champ de type string.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Auteur,Titre
    'De Gaulle','Mémoire d''espoir'
    'Leone','mon nom est "personne"'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private const string DOUBLE_QUOTE = "\"";
    private const string SIMPLE_QUOTE = "'"; 
    private static char[] CHARS_TO_ESCAPE = {  '"',',', ';' };
    
    public static string Escape(string text, bool UseSingleQuote) 
    { 
       string UsedQuote = UseSingleQuote ? SIMPLE_QUOTE : DOUBLE_QUOTE ;
       text.Replace(UsedQuote, UsedQuote+UsedQuote);
       CHARS_TO_ESCAPE[0]= UsedQuote[0] ;
       if (text.IndexOfAny(CHARS_TO_ESCAPE) > -1) text = UsedQuote + text + UsedQuote ;     
       return text; 
    }
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Merci Graffito pour ta réponse Effectivement c'était logique j'ai dû m'embrouiller les méninges lorsque j'ai commencé à bosser sur les specs techniques
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

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

Discussions similaires

  1. Probleme avec encodage de simple quote
    Par linkowich dans le forum Langage
    Réponses: 2
    Dernier message: 31/10/2005, 13h16
  2. Lecture simple de fichiers formatés
    Par enicnath dans le forum Général Python
    Réponses: 4
    Dernier message: 10/10/2005, 14h44
  3. lecture simple de fichiers formatés
    Par enicnath dans le forum Langage
    Réponses: 7
    Dernier message: 06/10/2005, 18h06
  4. query format csv
    Par tiopan dans le forum Access
    Réponses: 3
    Dernier message: 29/09/2005, 14h27
  5. [D6][Excel] Comment enregistrer en format csv ?
    Par ShinGaruda dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 04/05/2005, 19h59

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