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

VB.NET Discussion :

Problème retour chariot vb.net


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Points : 12
    Points
    12
    Par défaut Problème retour chariot vb.net
    Bonjour,
    j'ai un batch qui permet de récupérer des données à partir d'une base de données et d'un fichier csv. Ce batch permet de créer un fichier .csv contenant toutes ces données. Une des données est une colonne appelée "COMMENTAIRES". Celle-ci peut contenir une à plusieurs lignes.
    Lors de la récupération des données, pour une raison qui m'échappe, certaines cellules contiennent bien les deux lignes mais d'autres n'en contiennent qu'une seule, sachant que la deuxième ligne est prise comme un nouvel enregistrement et mise sur la ligne suivante du fichier csv (format excel) (cf fichier en pièce jointe)

    Ici, comrow est une ligne d'un dataset utilisée dans les traitement du batch, c'est elle qui contient les données qui seront ensuite insérées dans le fichier csv.

    J'ai cherché à savoir ce que le champ contenait comme caractère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comRow.COMMENTAIRES.Contains(cchar(vblf))
    Cette fonction retourne True et pour les caractères vbCr, vbCrLf et vbNewLine, la fonction retourne False.

    J'ai donc essayé de remplacer le caractère vbLf (les autres aussi par désespoir de cause) par "" comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim ligneSeparators() As Char = {CChar(vbNewLine), CChar(vbCr), CChar(vbLf), CChar(vbCrLf)}
    comRow = DirectCast(DataRetriever.Comment.Rows.Find(PrimaryKey), dsPortfolio.CommentRow)
    comRow.COMMENTAIRES.Replace(ligneSeparators, "")
    comRow.COMMENTAIRES.Replace(CChar(vbNewLine), "")
    comRow.COMMENTAIRES.Replace(CChar(vbCr), "")
    comRow.COMMENTAIRES.Replace(CChar(vbLf), "")
    comRow.COMMENTAIRES.Replace(CChar(vbCrLf), "")
    Ce qui n'a rien changé...

    J'ai donc besoin de votre aide pour pouvoir récupérer dans mon fichier csv, les lignes avec saut de ligne lorsqu'il est nécessaire mais dans la même cellule.
    Je tiens à préciser que je ne peux pas modifier les valeurs en base.

    En espérant avoir été assez claire, merci d'avance pour votre aide.
    Images attachées Images attachées  

  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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Les chaines de caractères en .NET sont immuables (immutable), c'est à dire qu'elles ne peuvent pas être modifiées. Cette instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comRow.COMMENTAIRES.Replace(ligneSeparators, "")
    ne modifie pas COMMENTAIRES. Elle renvoie une nouvelle chaine de caractères, qu'il faut affecter à COMMENTAIRES :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comRow.COMMENTAIRES = comRow.COMMENTAIRES.Replace(ligneSeparators, "")
    A priori cette instruction est suffisante, les 4 suivantes ne servent à rien

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Merci pour ta réponse, en effet cela marche beaucoup mieux

    Par contre, j'ai toujours un problème. En effet, le remplacement par un espace était juste un test. Je veux garder les retours à la ligne sur ma cellule mais à l'intérieur de la cellule.
    Mon problème est que pour certaines lignes, ces retours à la ligne se font sur en dehors de la cellule, ce que je ne comprends pas.
    Quand je remplace le vbLf par "", ils se modifient tous mais ils n'ont pas le même comportement dans mon fichier csv...

    Pouvez-vous me donner une raison à ça et une solution pour me sortir de ce problème?
    Merci

  4. #4
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Ben y a pas vraiment de solution, le format CSV ne permet pas de faire des retours à la ligne dans un même cellule...
    Si c'est pour l'ouvrir dans Excel, essaie plutôt de générer directement un fichier Excel. C'est pas très compliqué, et y a même pas besoin d'avoir Excel installé (cf. cet article et cette librairie)

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    En fait, je reprends quelque chose de déjà existant et je n'ai pas le choix pour le csv...
    Ce que je ne comprends pas, c'est que le retour à la ligne se fait correctement pour certaines lignes mais pas pour d'autres dans mon fichier csv. Et les caractères pour toutes les lignes (celles qui "fonctionnent" et les autres) sont des vbLf...

  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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par cocoaparis Voir le message
    Et les caractères pour toutes les lignes (celles qui "fonctionnent" et les autres) sont des vbLf...
    Tu es sûre ? Parce que je ne vois pas d'autre explication pour cette différence de comportement

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    J'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comRow.PORTF_COMMENT = comRow.PORTF_COMMENT.Replace(CChar(vbLf), "")
    en mode Debug.
    Dans mon fichier final, tous les sauts de ligne ont disparus, ceux qui "fonctionnaient" comme les autres.
    Le problème est qu'il faut que je garde les sauts de ligne pour la lisibilité pour mon business...
    Je ne comprends donc pas pourquoi le comportement change entre ces différentes lignes

  8. #8
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    et si, au contraire, tu ne gardais que les vbLf ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comRow.PORTF_COMMENT = comRow.PORTF_COMMENT.Replace(vbCrLf, vbLf)

  9. #9
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Et bien, ça ne change rien...
    Il ne trouve pas de vbCrLf, donc il ne peut pas les remplacer. Il n'y a que des vbLf mais qui ne se comportent pas de la même manière

  10. #10
    Membre averti Avatar de Sacha999
    Inscrit en
    Mars 2007
    Messages
    294
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2007
    Messages : 294
    Points : 350
    Points
    350
    Par défaut
    Et si le seul et unique traitement que tu faisais sur ce COMMENTAIRE était la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    comRow.COMMENTAIRES = """" & comRow.COMMENTAIRES.Replace("""", """""") & """"
    Si ca ne marche pas, montre nous comment tu gènére ton fichier CSV ?
    Quel séparateur de champs utilises-tu ? Quel encodage du texte? Un fichier exemple?
    Le forum c'est trop génial

  11. #11
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Merci pour vos réponses.
    Sacha, ta solution ne marchait pas car le problème venait des caractères vbLf.
    Cependant, je viens de comprendre pourquoi j'avais des erreurs. Un traitement était fait sur les lignes contenant une "," en mettant des "" et donc les retours à la ligne fonctionnaient.
    Les champs ne contenant pas de "" mais contenant le caractère vbLf plantaient.

    Il faut donc penser à mettre des guillements dans les champs qui contiennent des retours à la ligne pour qu'ils soient reconnus comme partie intégrante du champ.

    Merci encore

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

Discussions similaires

  1. [xsl] XML-> PDF: Problème retour chariot
    Par JohnnyWalk dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 28/06/2008, 14h35
  2. Problème Retour Chariot
    Par nathalie16 dans le forum iReport
    Réponses: 4
    Dernier message: 18/04/2008, 08h45
  3. Problème retour chariot dans un texte
    Par arnaud_verlaine dans le forum Flash
    Réponses: 2
    Dernier message: 30/08/2006, 22h06
  4. Problème retour chariot dans un fichier texte
    Par Redondo dans le forum Windows
    Réponses: 2
    Dernier message: 08/02/2006, 18h23
  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