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

JavaScript Discussion :

Forcer des guillemets dans une chaine de caractères ?


Sujet :

JavaScript

  1. #1
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 320
    Points : 286
    Points
    286
    Par défaut Forcer des guillemets dans une chaine de caractères ?
    Salut les gars,

    c'est surement une question très bête, mais je tourne en rond, je ne dois pas faire les bonnes recherches, donc je me tourne vers les pros.

    L'utilisateur saisis un texte libre dans un TEXTAREA, mais il faut que je l'enregistre dans mon fichier text entouré par des guillemets et bien sur il faudra que je fasse le chemin à l'envers pour la lecture.

    AMHA, un bon .replace avec la bonne expression régulière devrait être la meilleur solution, mais je ne trouve pas.

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    un replace pour mettre des guillemets autour ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var chaine="coucou";
    chaine='"'+chaine+'"';
    alert (chaine)

  3. #3
    Membre averti
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Points : 362
    Points
    362
    Par défaut
    Tout dépend à quoi ça sert. Si la chaîne n'est pas évaluée, je ne vois pas. Si elle est évaluée, ça va dépendre de comment elle est évaluée.

    Par exemple pour du javascript, on échappe les guillements avec un "backslash" : " > \", si la chaîne doit être évaluée (écriture litérale par exemple).

    Le principe pour l'écriture :
    - déterminer quel caractère d'échappement on va utiliser,
    - échapper ce caractère dans la chaine
    - échapper le "

    L'inverse pour la lecture

    Ce qui donnerait toujours pour du js :

    Code Javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var unquoted = "...";
    var quoted = unquoted.replace(/\\/g,"\\\\").replace(/\"/g,"\\\"");
    unquoted === quoted.replace(/\\\"/g,"\"").replace(/\\\\/g,"\\") // true

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    HS il me semble lyssandro
    il parle d'encardrer le texte avec de guillemets.

    Par contre en effet si le texte contient des guillemets il faudra les échapper ...

  5. #5
    Membre averti
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Points : 362
    Points
    362
    Par défaut
    Yep possible, c'est vague comme besoin ... Comme il parlait d'un fichier texte j'ai pensé qu'il voulait juste des délimiteurs pour, à la lecture, savoir où était sa chaîne de caractères. Mais bon, tout dépend du contexte d'utilisation et il n'est pas vraiment précisé.

  6. #6
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 320
    Points : 286
    Points
    286
    Par défaut
    Merci les gars,

    voila ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WLigneTXT = WLigneTXT + "\"" + WValeur + "\""; // Ajout les guillemets en début et en fin de chaine.
    et 
    WVal_Champs = WVal_Champs.replace(/\"/g, "");
    Ca à l'air d'être bon, maintenant, effectivement, s'ils saisissent un texte contenant des guillemets, je crains que ça foute la m*rde, non ?

  7. #7
    Membre averti
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Points : 362
    Points
    362
    Par défaut
    Ooh à peine ...

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    pour supprimer les guillements au debut et à la fin ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WVal_Champs = WVal_Champs.replace(/^"|"$/g, "");
    pas contre si il y a des guilllemets dedans, relis les post au dessus ... le mot magique est "échapper"

  9. #9
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 320
    Points : 286
    Points
    286
    Par défaut
    Mouais, j'me doutais bien que vous répondriez un truc du genre...
    Mais je suis vraiment fâché avec les expressions régulières... arf !
    Je me demande si le plus simple va pas être d'interdire la saisie de guillemets pour les TEXTAREA ???

    Donc la solution de Lysandro, n'est pas complète, ou si, même avec de la saisie de guillemets ?

  10. #10
    Membre averti
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Points : 362
    Points
    362
    Par défaut
    A quoi servent tes guillemets autour de ta chaine ? Comment les utilises tu ?

  11. #11
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 320
    Points : 286
    Points
    286
    Par défaut
    C'est ajouté à un fichier TXT dans des lignes du type :

    ...
    xxx;nom_commentaire;"ligne de commentaire<BR/>ligne de commentaire..."
    ...

    Ces fichiers TXT sont pris en compte par des programmes Excel qui les traites et font des tableaux et graphiques dynamiquement.
    La personne qui s'en occupe m'a donc demandé que les commentaires soient encadrés par des guillemets.

  12. #12
    Membre averti
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Points : 362
    Points
    362
    Par défaut
    Mouais ... fichier csv, a priori, le séparateur utilisé est le point-virgule et les guillemets sont utilisés pour avoir un format auto en texte. Je ne pense pas, dans ce cas, que des guillemets dans la chaine de caractère pose problème. C'est à vérifier auprès de la personne qui s'occupe de ça. Un petit jeu d'essai s'impose avec une chaine de caractères contenant des guillemets, une autre des points virgules, encore une autre avec une séquence ";" (guillemets, point-virgule,guillemets) au mileu. Si aucun des cas ne pose problème t'es bon. Sinon bin en fonction des cas ... c'est peut-être le point-virgule qu'il faudra échapper

    edit: après un petit test avec un Excel 2003 (!), dans les fichiers type CSV, les guillemets sont simplement doublés. Donc en plus de ce qu'a déjà dit SpaceFrog, pour l'écriture WValeur.replace(/\"/g,"\"\""); devrait suffire. Pour la lecture, en ce qui te concerne, il faudra l'intégrer dans ta boucle de lecture ou voir avec les expressions régulières ...

  13. #13
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 888
    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 888
    Points : 6 632
    Points
    6 632
    Par défaut
    Dans ce cas pour l'écriture:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WLigneTXT = WLigneTXT + '"' + WValeur.replace(/"/g, '""') + '"';
    et pour la lecture:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WVal_Champs = WVal_Champs.replace(/"("?)/g, '$1');

  14. #14
    Membre averti
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Points : 362
    Points
    362
    Par défaut
    @Zebulon777: Résolu ?

    Remarques:
    - J'ai échappé les guillemets dans l'expression régulière, c'est effectivement inutile. /\"/g se remplace avantageusement par /"/g.
    - L'expression régulière correcte pour supprimer les guillemets en début et fin est /(^")|("$)/g, /^"|"$/g ne fonctionnera comme attendu.
    - Si tu veux relire ce que tu a écris : WLigneTXT, il va falloir séparer les champs avant de retirer les guillemets doublés. Tu devras tenir compte du fait qu'il pourra y avoir des points-virgules à l'intérieur des chaines de caractères (les commentaires) donc il te faudra une boucle de lecture, boucle dans laquelle tu pourras retirer les guilllemets en trop. Ou bien, une expression régulière à utiliser dans WLigneTXT.split(/.../), mais celle là ne sera pas triviale.
    Des specs pour la boucle de lecture (basé sur excel, l'autre appli) a minima pourraient être :
    - les champs sont séparés par des point-virgules ;
    - il y a deux types de champs :
    -- standard
    -- chaine de caractères
    - les champs standards peuvent contenir n'importe quoi sauf des guillemets et des points-virgules, ils sont délimités par le premier et le dernier caractère n'étant pas un espace non significatif ;
    - les chaines de caractères commencent et terminent par des guillemets, les guillemets à l'intérieur des chaines sont doublés, elle peuvent contenir n'importe quoi y compris des points-virgules ;
    - on peut admettre des espaces non significatifs en début et fin de champ (i.e. début et fin de ligne, avant et après le point virgule).

  15. #15
    Membre actif Avatar de Zebulon777
    Homme Profil pro
    Informaticien
    Inscrit en
    Février 2005
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Février 2005
    Messages : 1 320
    Points : 286
    Points
    286
    Par défaut
    Merci les gars, tout à l'air de fonctionner.
    Donc, résolu...

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/04/2009, 11h21
  2. [E-03] Gestion des guillemets dans une chaîne de caractères
    Par clemou dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/03/2009, 14h25
  3. Extraire des champs dans une chaine de caractère
    Par clemuche dans le forum Requêtes
    Réponses: 1
    Dernier message: 25/02/2009, 23h24
  4. Réponses: 3
    Dernier message: 01/08/2008, 09h58
  5. Mettre des guillemets dans une chaine SQL dans du VBA ?
    Par Marie_2116 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 05/07/2007, 10h43

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