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 :

Problème flux 1024 caractères et retour chariot


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Par défaut Problème flux 1024 caractères et retour chariot
    Bonjour,

    J'ai un problème :

    Je souhaiterai écrire dans un fichier une série de lignes, jusque là tout va bien ,mais lorsque celle-ci dépasse 1024 caractères, un retour chariot apparait automatiquement, et je n'ai pas envie, voilà la déclaration de mon flux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichierDestination = new StreamWriter(agencetxt, true, Traitements.writeEncoding, 2048);
    ,

    Lors de l'écriture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    textWriter.Write(sb.ToString(), 0, 2048);
    sb est un StringBuilder.

    pourtant j'ai bien spécifié 2048 caractères...Je ne comprends vraiment pas.

    Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ben a priori c'est ton StringBuilder qui doit contenir un retour à la ligne... en tout cas un StreamWriter n'insère pas automatiquement des retours à la lignes

    Par contre, attention à la méthode Write que tu utilises : la seule surcharge qui correspond à ces paramètres est celle ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public virtual void Write(string format, Object arg0, Object arg1);
    Les paramètres arg0 et arg1 n'ont donc rien à voir avec l'index de début et la longueur, ce sont des arguments à formater dans la chaine à la place de "{0}" et "{1}"
    Pourquoi tu n'utilises pas simplement textWriter.Write(sb.ToString()) ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Ben a priori c'est ton StringBuilder qui doit contenir un retour à la ligne... en tout cas un StreamWriter n'insère pas automatiquement des retours à la lignes

    Par contre, attention à la méthode Write que tu utilises : la seule surcharge qui correspond à ces paramètres est celle ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public virtual void Write(string format, Object arg0, Object arg1);
    Les paramètres arg0 et arg1 n'ont donc rien à voir avec l'index de début et la longueur, ce sont des arguments à formater dans la chaine à la place de "{0}" et "{1}"
    Pourquoi tu n'utilises pas simplement textWriter.Write(sb.ToString()) ?
    En fait je fait successivement plein de sb.append() avec les variables que je veux mettre dans le fichier final et à la fin je fais un textWriter.WriteLine(sb.ToString()) qui balance toute ma ligne d'enregistrements.

    en fait je me rends compte qu'en passant mon fichier de sortie sous VS, il me dit qu'il y a des caractères CR et LF qui correspondent à un retour à la ligne...mais comment faire pour qu'il ne le prennent pas en compte ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Par défaut
    Bon je vois d'où vient le problème, mais je n'arrive pas à le résoudre...

    En fait il y a des CR LF dans un CDATA de mon XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    - <texte_web>
    - <![CDATA[ 
    Maison de 110m² entierement rénovée (dans le respect des nouvelles normes factures à l'appui) sur  un niveau  comprenant 3 chambres, salle à Manger, Salon, et Cuisine indépendante. Exposée Sud-Ouest.
    Jardin de 380m² piscinable et arboré (arbres fruitiers, pin, olivier, palmier) avec Cuisine d'été et puit opérationnel Mandat N° 23
     
      ]]> 
      </texte_web>
    On peut voir qu'il y à un retour chariot avant Jardin de 380m².

    Comment faire pour les supprimer ? J'ai essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    explorimmo.TexteAnnonce = (noeud.SelectSingleNode("texte_web") != null) ? noeud.SelectSingleNode("texte_web").InnerText.Replace(Environment.NewLine, "") : "";
    Mais ça ne change rien, il y a toujours un retour chariot

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Par défaut
    En fait c'est bon, c'était un simple \n dans le CDATA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    explorimmo.TexteAnnonce = (noeud.SelectSingleNode("texte_web") != null) ? noeud.SelectSingleNode("texte_web").InnerText.Replace("\n", "") : "";

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Tu es sur que c'est bien CR LF et non pas juste LF ?
    Essaie comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    explorimmo.TexteAnnonce = (noeud.SelectSingleNode("texte_web") != null) ? noeud.SelectSingleNode("texte_web").InnerText.Replace("\r", "").Replace("\n", "") : "";
    Par contre c'est pas génial en terme de performance de faire 2 fois le SelectSingleNode... il vaudrait mieux faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    explorimmo.TexteAnnonce = "";
    XmlNode texte_web = noeud.SelectSingleNode("texte_web");
    if (texte_web != null)
        explorimmo.TexteAnnonce = texte_web.InnerText.Replace("\r", "").Replace("\n", "");

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/07/2010, 09h40
  2. Caractère de retour chariot
    Par niamo dans le forum IHM
    Réponses: 2
    Dernier message: 10/06/2010, 10h53
  3. Réponses: 1
    Dernier message: 09/04/2009, 09h36
  4. [Struts] Problème de retour chariot
    Par pimousse76 dans le forum Struts 1
    Réponses: 5
    Dernier message: 22/11/2004, 15h39
  5. Nouvelle installation MySql4.0.2d - Problème retour chariot
    Par pit_bulle dans le forum Installation
    Réponses: 2
    Dernier message: 30/09/2004, 16h07

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