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 :

Aller à la ligne string \n dans BDD [Débutant]


Sujet :

C#

  1. #1
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2011
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2011
    Messages : 101
    Points : 134
    Points
    134
    Par défaut Aller à la ligne string \n dans BDD
    Bonjour,

    Je développe une application WP en C# et je fais face à un problème.
    J'ai une classe Enigme avec plusieurs attributs, dont un string qui sert d'énoncé à l'énigme.

    Quand j'ajoute une énigme, afin d'aller à la ligne, il me suffit de placer des \n.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Enigme en = new Enigme()
    {
        Titre = "Une histoire de lettre",
        Texte = "Je commence par un e\nJe finis par un e\nJe contiens une lettre.\nQui suis-je?",
        Num = 1,
        Solution = "enveloppe",
        Reussi = false
    };
    Quand j'affiche mon texte, j'ai bien :

    Je commence par un e
    Je finis par un e
    Je contiens une lettre
    Qui suis-je?

    MAIS, mon problème est que je ne note pas ma chaine en brute, je la récupère d'une base de données...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Enigme eni = new Enigme()
    {
        Num = (int)e.Result[i],
        Titre = Convert.ToString(e.Result[i+1]),
        Texte = Convert.ToString(e.Result[i+2]),
        Solution = Convert.ToString(e.Result[i+3]),
        Reussi = false
    };
    Dans ma base de données SQL Server, j'ai une variable ntext pour mon texte.
    La valeur est : Je commence par un e\nJe finis par un e\nJe contiens une lettre.\nQui suis-je?

    Je devrais donc avoir le même résultat en sortie, mais il n'en est rien, quand j'affiche mon texte venant la BDD, j'obtiens :

    Je commence par un e\nJe finis par un e\nJe contiens une lettre.\nQui suis-je?

    Avec les \n et non des retour à la ligne. Comment puis-je arrangeais ça? J'attribue pourtant bien la même chaine de caractère au Texte, ce sont tout les 2 des string, ayant la même valeur...

    Merci.

    édit : J'ai trouvé une solution :

    1. Dans la base de données, je remplace mes \n par un caractère spécial que je n'utiliserais jamais pour définir une énigme, j'ai pris '§'.

    2. Je split mon string sur ce §, et je recopie le tout dans un nouveau string en ajoutant \n

    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
     
    string[] tableau_de_mots = (Convert.ToString(e.Result[i+2])).Split('§');
    string texteEnigme = "";
    for (int j = 0; j < tableau_de_mots.Count(); j++)
    {
        texteEnigme += tableau_de_mots[j] + "\n";
    }
    Enigme eni = new Enigme()
    {
        Num = (int)e.Result[i],
        Titre = Convert.ToString(e.Result[i+1]),
        Texte = texteEnigme,
        Solution = Convert.ToString(e.Result[i+3]),
        Reussi = false
    };

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Points : 674
    Points
    674
    Par défaut
    Et pourquoi tu stockes pas tout simplement le titre, le texte et la solution dans trois champos séparés dans ta BDD?
    C'est pas souvent une bonne idée de mélanger formattage et données, surtout si ton appli est amenée à évoluer...

    Je trouve que ta solution est un peu bancale, dans le sens où elle implique que tu ne peux plus utiliser le caractère §.

    Encore une remarque: en C# il y a moyen d'abstraire le retour à la ligne: il y a pour cela la propriété static Environment.NewLine (plus besoin de te poser de questions en fonction de la plateforme)

    A+

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Points : 560
    Points
    560
    Par défaut
    Citation Envoyé par chrisdot Voir le message
    Et pourquoi tu stockes pas tout simplement le titre, le texte et la solution dans trois champos séparés dans ta BDD?
    C'est pas souvent une bonne idée de mélanger formattage et données, surtout si ton appli est amenée à évoluer...

    Je trouve que ta solution est un peu bancale, dans le sens où elle implique que tu ne peux plus utiliser le caractère §.
    Sauf erreur de ma part, il n'a jamais mentionné que le titre, l'énoncé et la solution de l'énigme était dans le même champ de la base de données.


    As tu essayé en utilisant \r\n ?
    As tu essayé avec un type de champ nvarchar(MAX) ?

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Points : 674
    Points
    674
    Par défaut
    Oui, mais pour moi le problème vient de la manière dont est mise \n dans la BDD...
    Si tu fais un string.IndexOf("\n") dans le champ issu de ta bdd, je suppose que tu ne le trouveras pas, n'est-il pas?

  5. #5
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2011
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2011
    Messages : 101
    Points : 134
    Points
    134
    Par défaut
    Non, le titre, le texte et la solution ne sont pas dans une même variable, c'est le texte qui a plusieurs lignes.

    En fait, quand j'ajoute dans la base de données à partir d'une RichTextBox, ça prend en compte les retour à la ligne.

    Cela ne les prends pas en compte quand j'ajoute manuellement dans la base de données... Ce que j'utilisais pour mes tests.

    Voici 2 lignes de ma base de données :



    La première est entrée manuelle, la seconde via une RichTextBox. Dans le second cas, il n'y a aucun séparateur, mais en écriture il me met bien des retours à la ligne.
    Pour la première solution, avant, en mettant des \n à la place des §, il ne me nottait \n dans la solution alors que je récupérais les valeurs dans un string, mais ce string ne faisait pas de retour à la ligne, il les nottait simplement à la suite.

    J'espère que c'est plus clair... Maintenant j'entre mes solutions dans la base de données uniquement via ma RichTextBox.

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Points : 674
    Points
    674
    Par défaut
    Bin oui, c'est bien ça le problème: "\n" est juste une façon de noter le caractère de retour à la ligne en C# qui apparemment serait 0x0a en hexa et 10 en décimal.
    Mais le fait de taper "\n" en TSQL ne veut rien dire: déjà ça génère 2 caractères et c'est du coup pas le bon !!
    C'est pr ça que ça marche en utilisant un programme pr le rentrer, mais en tapant directement dans la BDD, il te faudrait trouver comment rentrer ce fameux caractère hexa, genre en tapant ALT+1+0 dans ton soft d'édition de bdd.

  7. #7
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2011
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2011
    Messages : 101
    Points : 134
    Points
    134
    Par défaut
    Oui, c'est bien ça, c'est le caractère 10 qui correspond au saut de ligne.

    Merci.

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

Discussions similaires

  1. [VBA-E] Comment aller à la ligne dans 1 zone de texte
    Par teaRz dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/07/2006, 10h09
  2. Aller à la ligne dans un textBox
    Par stitch dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 22/05/2006, 11h43
  3. Aller à la ligne dans un fichier texte
    Par fikren dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 16/03/2006, 15h24
  4. Comment aller a ligne dans 1 label?
    Par jeannot27 dans le forum C++Builder
    Réponses: 5
    Dernier message: 28/10/2005, 15h27
  5. Aller à la ligne dans une balise <option>
    Par nebule dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 01/12/2004, 18h27

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