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 :

Découper un texte sur plusieurs lignes


Sujet :

VB.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 127
    Points : 52
    Points
    52
    Par défaut Découper un texte sur plusieurs lignes
    Bonjour,

    Existe il une fonction permettant de découper un texte sur plusieurs lignes ou rangés dans plusieurs variables de x caractères.
    Exemple : réaliser par exemple des lignes de 40 caractère sans couper de mots.

    merci

  2. #2
    Membre expérimenté
    Avatar de charouel
    Homme Profil pro
    Freelance
    Inscrit en
    Mars 2009
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 618
    Points : 1 454
    Points
    1 454
    Billets dans le blog
    9
    Par défaut
    voila un exemple mais tu doit spécifier l’arrêt de ton curseur, dans ce cas apres tous paragraphe qui fini par ain on découpe le text

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    string[] lines2 = System.IO.File.ReadAllLines(@"../../../mime.txt");
    IEnumerable<string> query2 =
                from line2 in lines2
                let w = line2.Split("\r\n\r\n")
                where line2.EndsWith("ain")
                select w[0] + ";" + w[1] + ";" + w[2] + ";" + w[3] + ";" + w[4] + ";";
    System.IO.File.WriteAllLines(@"../../../Bloq.csv", query2.ToArray());

  3. #3
    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
    Tu peux faire quelque chose comme ça :

    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
    static IEnumerable<string> SplitLines(string s, int maxLength)
    {
        var builder = new StringBuilder();
        var words = s.Split(' ');
        foreach (var word in words)
        {
            if (builder.Length == 0)
            {
                builder.Append(word);
            }
            else if (builder.Length + word.Length <= maxLength)
            {
                builder.Append(" " + word);
            }
            else
            {
                yield return builder.ToString();
                builder.Clear();
                builder.Append(word);
            }
        }
        if (builder.Length > 0)
            yield return builder.ToString();
    }
    Il y a une limitation potentiellement un peu gênante, c'est que ça ne gère que l'espace comme séparateur ; si tu en ajoutes d'autres au niveau du Split, c'est difficile de savoir quel était le séparateur pour le remettre si besoin... donc en fait il faudrait peut-être utiliser une autre approche. J'y réfléchirai sans doute plus tard, c'est un problème intéressant

  4. #4
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour messieurs,

    C'est juste pour vous signaler que VB.net n'est pas très friand des accolades.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  5. #5
    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 clementmarcotte Voir le message
    Bonjour messieurs,

    C'est juste pour vous signaler que VB.net n'est pas très friand des accolades.
    Effectivement, j'ai pas vu qu'on était dans le forum VB.NET

    Cela dit c'est pas très compliqué à transcrire en VB.NET (à condition d'utiliser VB11, donc VS2012 ou 2013, puisque les itérateurs (Yield) n'existaient pas dans les versions précédentes)

    EDIT: voilà la version VB :

    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
    Shared Function SplitLine(ByVal s As String, ByVal maxLength As Integer) As IEnumerable(Of String)
        Dim builder As New StringBuilder()
        Dim words = s.Split(' ')
        For Each word in words
            If builder.Length = 0 Then
                builder.Append(word)
            ElseIf builder.Length + word.Length <= maxLength Then
                builder.Append(" " + word)
            Else
                Yield builder.ToString()
                builder.Clear()
                builder.Append(word)
            End If
        Next
     
        If builder.Length > 0
            Yield builder.ToString()
    End Function

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/01/2006, 19h33
  2. 8i : sql loader et champ texte sur plusieurs lignes
    Par naonedboy dans le forum SQL*Loader
    Réponses: 1
    Dernier message: 23/11/2005, 10h07
  3. [JButton] Texte sur plusieurs lignes
    Par leminipouce dans le forum Composants
    Réponses: 5
    Dernier message: 19/10/2005, 10h17
  4. [CR10 ]un texte sur plusieurs lignes?
    Par speed034 dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 28/09/2005, 07h26
  5. Réponses: 2
    Dernier message: 21/09/2005, 12h18

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