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 de formatage de chaîne de caractères


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Informatique en Alternance
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Informatique en Alternance
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Par défaut Problème de formatage de chaîne de caractères
    Bonjour,

    Voilà mon soucis, j'ai un fichier composé de plusieurs lignes (sans déconner) qui elles-mêmes sont composées de plusieurs champs, chacune de ces lignes doivent être chargées dans une table et chacun de ces champs dans ces lignes correspond à un champ dans la table.
    Ces champs sont délimités par deux points-virgules, exemple : ;"abc";. Un champ peut être de deux types, soit un entier, ex : ;123;, soit une chaîne de caractère, ex : ;"abc";, comme vous pouvez le voir ce dernier type de champ est délimité par deux guillemets.
    Les utilisateurs ont la possibilité de mettre un peut ce qu'ils veulent dans ce type de champ et on ne peut changer ça, il est donc possible de se retrouver avec un champ tel que celui-ci : ;"ab"c";, le traitement d'insertion va alors penser que la chaîne de caractère est la suivante : ;"ab" et planter.
    De plus, un champ de ce type peut être sur plusieurs lignes, exemple :
    ;"abc
    ab
    c";


    Ce que je souhaite faire est de supprimer tous les guillemets en trop qui peuvent se trouver dans ces chaînes, en reprenant les deux exemples ci-dessus, pour le premier la chaîne initiale : ;"ab"c"; doit devenir celle-ci ;"abc"; et la deuxième chaîne :
    ;"abc
    ""
    ab"
    c";


    doit devenir celle-ci :
    ;"abc
    ab
    c";


    donc suppression des guillemets et de la ligne vide.

    Et il y a encore pleins d'autres cas différents que j'arrive plus ou moins à gérer mais c'est une vraie usine à gaz avec des conditions partout...mais je vois pas comment le gérer autrement.

    Selon vous quelle serait la meilleure méthode à adopter ? Les expressions régulières (je connais pas vraiment) peuvent-elles gérées ce genre de cas ?

    Merci.

  2. #2
    Membre Expert Avatar de ed73170
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mai 2009
    Messages
    765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur indépendant

    Informations forums :
    Inscription : Mai 2009
    Messages : 765
    Par défaut
    Bonjour,

    Je ne connais pas non plus les expressions réguières, voici donc ce que je ferais sans les utiliser :

    - Charger tout le fichier dans une String
    - Enlever tous les guillemets de la String
    - Spliter la String avec ;
    - Pour chaque élément du tableau obtenu, regarder si c'est un entier ou pas, si ce n'en est pas un, l'entourer de ""
    - Regénérer une String globale en cas de besoin pour l'insertion dans la table

  3. #3
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut Expression régulière
    Comme tu le suggères, les expressions régulières seraient adaptées. Tu peux quasiment tout faire avec, prendre tout les cas en compte.
    MAIS, écrire des expressions régulières c'est plus difficile qu'on pourrait le penser. C'est un autre langage 'pas simple) à apprendre.
    Surtout pour faire de la normalisation, avec remplacement de caractères en fonction des multiples cas.

    La solution précédemment proposé paraît plus facile, tu lis ligne par ligne, en utilisant Split sur le caractère ";", tu peux séparés tes champs. et après tu te fais une petite fonction qui traite les guillemets de tes champs, puis le reconstruit.

    SAUF QUE, apparemment tu as un champ qui peut être sur plusieurs lignes, n'est ce pas ? Ceci peut grandement te complexifié l’algorithme proposé.

    Donc petite question, comment sais tu que la ligne suivante est la suite de ton champ ou la ligne suivante ?
    Et surtout, es tu certains, qu'il ne manque pas un champ ou que tu es un champs en trop ?

    Car si tu as des cas comme ceux-ci, faire un code qui marche me semble relever de la magie. (même avec les expressions régulières).

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Informatique en Alternance
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Informatique en Alternance
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Par défaut
    Merci pour ta réponse.

    Je viens de remarquer que j'avais oublié quelque chose d'important...qui rend la chose encore plus sympa

    Les utilisateurs peuvent aussi rajouter des points-virgules dans les chaînes de caractères, ce qui peut donner quelque chose comme ça : ;"abc;"abc"; et la chaîne correcte est la suivante : ;"abc;abc";.

    Me demandez pas pourquoi ils peuvent faire ça, on a pas conçu cet outil et on est obligé de s'y adapter...

    Donc si je reprends ton idée, si on enlève les guillemets, OK on a une grosse chaîne sans guillemets avec uniquement les séparateurs ; , mais le problème avec la chaîne ci-dessus c'est que si on fait un Split sur le point-virgule, on se retrouvera avec des faux champs supplémentaires provoquant un décalage qui amèneront forcément un plantage lors de l'insertion dans la table.

  5. #5
    Membre Expert Avatar de ed73170
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mai 2009
    Messages
    765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur indépendant

    Informations forums :
    Inscription : Mai 2009
    Messages : 765
    Par défaut
    C'est sûr que si l'utilisateur peut saisir des ; alors ma solution ne marche plus.

    Lorsque je traite ce genre de fichier, j'empêche l'utilisateur de saisir le caractère correspondant au séparateur. Mais là tu me dis que tu utilises un logiciel que tu n'as pas conçu alors tu n'as pas le choix.

    Dans ce cas, comme le dis mactwist69 j'ai bien peur qu'il ne te reste que la magie.

  6. #6
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    +1 pour la magie !

    Il faut propager les noms des éditeurs du logiciel que tu utilises histoire que personne n'aille acheter cette saloperie !

  7. #7
    Membre averti
    Homme Profil pro
    Développeur Informatique en Alternance
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Informatique en Alternance
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Par défaut
    Ok pour la magie !! Moi qui voulait pas devenir chauve à force de m'arracher les cheveux, bah ça risque d'être chaud :/

    Et t'inquiète pas pour l'éditeur, c'est un outil développé en interne donc peu de risque de le croiser ailleurs.

  8. #8
    Membre éclairé
    Avatar de Etanne
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 469
    Par défaut
    Citation Envoyé par Genyuumaru Voir le message
    Les utilisateurs peuvent aussi rajouter des points-virgules dans les chaînes de caractères, ce qui peut donner quelque chose comme ça : ;"abc;"abc"; et la chaîne correcte est la suivante : ;"abc;abc";.
    J'osai pas poser la question par peur de la réponse.

    Ne peuvent ils pas mettre un \ devant " si ce caractère fait partie d'une valeur ?

    Bon courage !
    Etanne

Discussions similaires

  1. Formatage de chaînes de caractères
    Par domiq44 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 28/09/2006, 10h52
  2. Réponses: 10
    Dernier message: 19/09/2006, 10h44
  3. Formatage de chaîne de caractères
    Par avigeilpro dans le forum Langage
    Réponses: 7
    Dernier message: 18/07/2006, 17h24
  4. [Configuration] problème de taille de chaînes de caractères
    Par Wormus dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 21/10/2005, 14h55
  5. Problème pour exécuter une chaîne de caractères
    Par Pongo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/09/2005, 10h34

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