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 :

[VB.Net] Astuce pour utiliser un string de longueur fixe ?


Sujet :

VB.NET

  1. #1
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 123
    Points : 58
    Points
    58
    Par défaut [VB.Net] Astuce pour utiliser un string de longueur fixe ?
    Bonjour,

    Sous vb6, il était possible de déclarer une string de longueur fixe. Ce n'est plus possible en Dotnet, du coup je voudrais savoir si quelqu'un a une astuce qui permettrait de le faire, ou peut-être une classe pour ce genre de choses..je n'ai rien trouvé via google ni ici.

    Merci de m'avoir lu

  2. #2
    Membre expérimenté Avatar de LaChips
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 109
    Points : 1 482
    Points
    1 482
    Par défaut
    Bonjour,

    Je viens te t'écrire une petite classe, j'expère qu'elle répondra à tes attentes :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
        public class MyString
        {
     
            private String _value = String.Empty;
            private Int32 _maxLenght;
     
            #region Constructors
     
            public MyString(Int32 maxLenght)
            {
                this._maxLenght = maxLenght;
            }
     
            public MyString(String value)
                : this(value.Length)
            {
                Set(value);
            }
     
            public MyString(String value, Int32 maxLenght)
                : this(maxLenght)
            {
                Set(value);
            }
     
            #endregion
     
            public void Set(String value)
            {
                if (value.Length > this._maxLenght)
                    this._value = value.Substring(0, this._maxLenght - 1);
                else
                    this._value = value;
            }
     
            public Int32 MaxLenght
            {
                get { return this._maxLenght; }
                set
                {
                    if (this._value.Length > value)
                        this._value = this._value.Substring(0, value - 1);
     
                    this._maxLenght = value;
                }
            }
            public char this[int index] { get { return this._value[index]; } }
     
            public override string ToString()
            {
                return this._value;
            }
     
            public static implicit operator MyString(String value)
            {
                return new MyString(value);
            }
     
            public static explicit operator String(MyString value)
            {
                return value.ToString();
            }
        }
    Cette classe n'est pas compléte, il est tout à fait possible de l'améliorer.

  3. #3
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 123
    Points : 58
    Points
    58
    Par défaut
    Je traduis de suite et je teste

    Merci d'avoir pris le temps de faire ça, c'est gentil

  4. #4
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 123
    Points : 58
    Points
    58
    Par défaut
    Voila ce que j'ai au final:

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    Public Class StringFixe
     
        Private _value As String
        Private _maxLength As Integer
     
    #Region "Constructeurs"
     
        Public Sub StringFixe()
            _maxLength = 0
            _value = ""
        End Sub
     
        Public Sub StringFixe(ByVal maxLength As Integer)
            _maxLength = maxLength
        End Sub
     
        Public Sub StringFixe(ByVal maxLength As Integer, ByVal value As String)
            _maxLength = maxLength
            Remplir(value)
        End Sub
     
    #End Region
     
    #Region "Subs et fonctions"
     
        Public Sub Initialiser(ByVal maxLength As Integer)
            _maxLength = maxLength
            _value = ""
        End Sub
     
        Public Sub Remplir(ByVal value As String)
            If value.Length > _maxLength Then
                _value = value.Substring(0, _maxLength)
            Else
                _value = value
            End If
        End Sub
     
        Public Function Length() As Integer
            Length = _maxLength
        End Function
     
        Public Function Value() As String
            Value = _value.ToString
        End Function
     
        Public Function ValueAt(ByVal position As Integer) As Char
            If position < _maxLength AndAlso position >= 0 Then
                ValueAt = _value.Chars(position)
            Else
                ValueAt = CChar("")
            End If
        End Function
     
    #End Region
     
    End Class
    Et pour initialiser dans une structure

    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
     
        Public Structure Test
            Dim StringALongueurFixe As StringFixe
            Public Sub Initialize()
                Dim StringALongueurFixe1 As New StringFixe
                StringALongueurFixe = StringALongueurFixe1 
            End Sub
        End Structure
     
        ' Puis 
     
            Dim test As New Test
            With test 
                .Initialize()
                .StringALongueurFixe.Initialiser(5)
                .PoiName.Remplir("123456")
            End With
            MsgBox(CStr(test.StringALongueurFixe.Value)) ' Affiche 12345
    Voila, encore merci LaChips !
    Toute suggestion est la bienvenue

  5. #5
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    As-tu essayé avec la classe StringBuilder ?

  6. #6
    Membre expérimenté Avatar de LaChips
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 109
    Points : 1 482
    Points
    1 482
    Par défaut
    Citation Envoyé par Skalp Voir le message
    As-tu essayé avec la classe StringBuilder ?
    Comment nous sécher en 7 mots
    c'est vrai que je n'y ai pas pensé.

  7. #7
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 123
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par LaChips Voir le message
    Comment nous sécher en 7 mots
    c'est vrai que je n'y ai pas pensé.
    Je n'ai pas vu dans le lien comment demander à ce qu'une chaine de caractère ne dépasse pas x chars

  8. #8
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344

  9. #9
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 123
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par smyley Voir le message
    Lorsque je veux faire:

    sb.maxCapacity = 5 ' pour 5 chars max

    J'ai une erreur comme quoi c'est une propriété readOnly :s

  10. #10
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 123
    Points : 58
    Points
    58
    Par défaut
    Et avec
    sb.Capacity = 2
    puis sb.Insert(0, "1234", 1)
    MsgBox sb.tostring ' affiche 1234

  11. #11
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Points : 553
    Points
    553
    Par défaut
    MaxCapacity s'initialise dans le constructeur de StringBuilder.

  12. #12
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 123
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par BCmDev Voir le message
    MaxCapacity s'initialise dans le constructeur de StringBuilder.
    Ok compris, merci je vais tester ça

  13. #13
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 123
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par BCmDev Voir le message
    MaxCapacity s'initialise dans le constructeur de StringBuilder.
    Re salut,
    Losque je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim test1 As New StringBuilder(5, 5)
    test.Append("123456")
    Ca plante, message d'erreur:

    capacity was less than the current size.
    Parameter name: requiredLength
    Idéalement, le logiciel ne devrait pas planter, mais juste récupérer les 5 premiers chars de "123456". Est-ce possible avec le stringBuilder ?

Discussions similaires

  1. [WM18] Astuce pour utiliser fonctions supplémentaires API V2 Google Maps
    Par courdi95 dans le forum Windev Mobile
    Réponses: 0
    Dernier message: 27/06/2013, 07h24
  2. [SQL2K5] Astuce pour utiliser une variable à valeur multiple
    Par Jinroh77 dans le forum Développement
    Réponses: 0
    Dernier message: 28/05/2008, 14h27
  3. Réponses: 9
    Dernier message: 13/10/2006, 15h39
  4. string de longueur fixe
    Par Rychi dans le forum C++
    Réponses: 11
    Dernier message: 14/09/2006, 21h46
  5. [Outils][InstallWIz.Net]Comment l'utiliser pour mon projet?
    Par fantomchris dans le forum EDI/Outils
    Réponses: 30
    Dernier message: 19/04/2006, 18h35

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