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

Dotnet Discussion :

Split sur chaîne de caractères avec séparateur variable


Sujet :

Dotnet

  1. #1
    Membre régulier
    Inscrit en
    Août 2009
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 149
    Points : 89
    Points
    89
    Par défaut Split sur chaîne de caractères avec séparateur variable
    Bonjour à tous,
    Je travaille sur un projet de prélèvements bancaires et j'ai un soucis avec la fonction SPLIT sur les chaînes de caractères.
    Présentation : la génération du fichier de prélèvement bancaire commence par le paramétrage du modèle à utiliser pour la génération. lors de ce paramétrage, l'utilisateur peux choisir selon la banque n'importe quel caractère comme séparateur de colonne. Au retour du fichier après traitement de la banque je récupère le fichier dans un répertoire prédéfini et je le décompose ligne par ligne et champ par champ que j'enregistre dans un DATASET.
    Le problème se trouve au niveau de la découpe des champs avec la fonction SPLIT. Si le séparateur est fixé d'avance dans mon code j'arrive sans soucis à utiliser la fonction split, mais si je mets le caractères dans une variable - puisque je ne le connais pas d'avance - la fonction SPLIT ne marque plus.

    Connaissez-vous une autre manière de procéder dans les cas pareils??

    Merci d'avance.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Bonjour,

    Il nous faudrait ton langage, et un peu de code ! Il n'y a aucune raison pour que la fonction est un comportement différent avec variable ou pas, donne nous le code qui est censé fonctionner et celui qui ne fonctionne pas.
    Sans plus d'info j'attirerais ton attention sur la signature de la fonction split, qui peut prendre un tableau de char ou un tableau de string.
    Enfin bref il nous faudrait ton code fonctionnel est celui qui ne l'est pas.

    J@ck.

  3. #3
    Membre régulier
    Inscrit en
    Août 2009
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 149
    Points : 89
    Points
    89
    Par défaut
    Bonsoir à tous,
    Tout d'abord je developpe en C# vs.net 2013. Voici le code qui fonctionne correctement :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    //Récupération des lignes du fichier une par une et remplissage du dataTable dt
                    using (StreamReader streamReader = new StreamReader(cheminFichier))
                    {
                        string laLine = "";
                        int lignFichier = 0;
                        bool bl = string.IsNullOrEmpty(separateur.Trim()) ? false : true;
     
                        while ((laLine = streamReader.ReadLine()) != null)
                        {
                            if (bl)
                            {
     
                                string[] separer = new String[] {"\t"};
                                string[] tableaMot = laLine.Split(separer, StringSplitOptions.None);
                                for (int p = 0; p <= (tableaMot.Length - 1); p++)
                                {
                                    if (p <= dt.Columns.Count - 1)
                                        dt.Rows[lignFichier][p] = tableaMot[p];
                                }
                            }
                            else
                            {
                                enregistreLaStructureDansDataTable(laLine, lstStructFichier, lignFichier);
                            }
     
                            lignFichier++;
                        }
     
                    }
    et voici celui qui ne fonctionne pas :


    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    //Récupération des lignes du fichier une par une et remplissage du dataTable dt
                    using (StreamReader streamReader = new StreamReader(cheminFichier))
                    {
                        string laLine = "";
                        int lignFichier = 0;
                        bool bl = string.IsNullOrEmpty(separateur.Trim()) ? false : true;
     
                        while ((laLine = streamReader.ReadLine()) != null)
                        {
                            if (bl)
                            {
                                string  separe = "\t";
                                string[] separer = new String[] {separe};
                                string[] tableaMot = laLine.Split(separer, StringSplitOptions.None);
                                for (int p = 0; p <= (tableaMot.Length - 1); p++)
                                {
                                    if (p <= dt.Columns.Count - 1)
                                        dt.Rows[lignFichier][p] = tableaMot[p];
                                }
                            }
                            else
                            {
                                enregistreLaStructureDansDataTable(laLine, lstStructFichier, lignFichier);
                            }
     
                            lignFichier++;
                        }
     
                    }

    cette ligne génère une erreur : string[] separer = new String[] {separe}; à la compilation.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Bonjour,

    EDIT => "\t" correspond à une chaine de caractère composée de 2 caractères '\' + 't', si tu veux splitter sur les tabulations tu n'auras d'autres choix que de splitter sur le caractère '\t', et donc d'utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        char separe = '\t';
        char[] separer = new char[] { separe };
        string[] tableaMot = laLine.Split(separer, StringSplitOptions.None);
    Finalement non, même dans une string ça passe quand même, je viens de tester. Par contre aurait tu l'exception dont tu parles ? parce que chez moi ça passe.

    bon code,
    J@ck.

  5. #5
    Membre régulier
    Inscrit en
    Août 2009
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 149
    Points : 89
    Points
    89
    Par défaut
    Salue à tous !!
    humm j'ai pas trop compris pourquoi mais, l'erreur à disparue et ça m'inquiète par ce que je ne sais pas trop pourquoi et comment.
    ça marche je ne sais comment.
    Merci J@ckHerror pour ta promptitude
    a+

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

Discussions similaires

  1. [Split] Chaîne de caractères avec espace variable
    Par smarlytomtom dans le forum Général Java
    Réponses: 2
    Dernier message: 24/06/2015, 15h06
  2. Réponses: 2
    Dernier message: 01/12/2013, 20h03
  3. Réponses: 1
    Dernier message: 09/04/2009, 10h36
  4. Réponses: 13
    Dernier message: 26/09/2008, 18h43
  5. Réponses: 1
    Dernier message: 02/08/2008, 17h26

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