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 :

Remplir Structure directement depuis fichier texte


Sujet :

VB.NET

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Remplir Structure directement depuis fichier texte
    Bonjour,

    voici mon problème. J'ai un fichier texte structuré ainsi :

    Laurent;16;Toulouse
    Jean;42;Agen
    Igor;53;Bordeaux

    et une structure déclarée ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Structure InfosPersonnes
      Public Nom as String
      Public Age as integer
      Public Ville as integer
    End Structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Personnes() as InfoPersonnes
    J'ai essayé un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim TXT As StreamReader = New StreamReader("./data/l922.csv")
     
    a=0
    Do
       Ligne = TXT.ReadLine
       If Ligne <> Nothing Then
          redim preserve Personnes(a)
          Personnes(a)=split(LIgne,";")
       End If
    Loop While Ligne <> Nothing
     
    TXT.Close()
    Mais ca marche pas. Quelqu'un aurait il la solution svp ?

  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
    Déjà, tu ferais mieux d'utiliser une liste plutôt qu'un tableau que tu redimensionnes à chaque fois (ce qui est très inefficace)
    Ensuite, tu essaies de mettre un tableau de chaines (le résultat de Split) dans un tableau qui est supposé contenir des instances de InfosPersonnes. Il faut construire l'objet InfosPersonnes à l'aide des données de chaque lignes ; ce n'est pas automatique...


    Tu peux faire quelque chose dans ce style :

    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
    Dim Personnes As New List(Of InfosPersonnes)
    Using TXT As StreamReader = New StreamReader("./data/l922.csv")
        a=0
        Do
            Ligne = TXT.ReadLine
            If Ligne <> Nothing Then
                Dim p As New InfosPersonnes
                Dim parts() As String = Ligne.Split(";")
                p.Nom = parts(0)
                p.Age = Int32.Parse(parts(1))
                p.Ville = parts(2)
                Personnes.Add(p)
            End If
        Loop While Ligne <> Nothing
    End Using

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    SAlut TomLev

    merci pour ta réponse mais je connais cette façon de faire mais le problème est que j'ai d'autres structures beaucoup plus longues à remplir ( structures avec 20 variables ). De suite, ta solution devient très fastidieuse car il faut que je me tape 20 lignes de code.

    En VBA, il y avait moyen de faire ce que je fait dans le premier message si le fichier texte était ouvert en binaire, c'est pour ça que je pense qu'il ya moyen de faire ça aussi en VB.net, ca donnait un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Open NOMFICHIER For Binary Access Read As 1
     
    Get #1, , MASTRUCTURE
     
    Close 1

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Points : 478
    Points
    478
    Par défaut
    Bonjour,

    Ta solution peut fonctionner si tu crées un objet InfosPersonne avec un new() attendant en paramètres un tableau de String.

    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
     
     
        Public Class InfosPersonnes
            Private _nom As String
            Private _age As Integer
            Private _ville As String
     
            Public Property Nom() As String
                Get
                    Return _nom
                End Get
                Set(ByVal value As String)
                    _nom = value
                End Set
            End Property
            Public Property Age() As Integer
                Get
                    Return _age
                End Get
                Set(ByVal value As Integer)
                    _age = value
                End Set
            End Property
            Public Property Ville() As String
                Get
                    Return _ville
                End Get
                Set(ByVal value As String)
                    _ville = value
                End Set
            End Property
     
            Public Sub New(ByVal infos As Object())
                Me.Nom = CStr(infos(0))
                Me.Age = CInt(infos(1))
                Me.Ville = CStr(infos(2))
            End Sub
        End Class
     
        Public Sub maSub()
            Dim Personnes As New List(Of InfosPersonnes)
            Using TXT As StreamReader = New StreamReader("./data/l922.csv")
                Dim Ligne As String = String.Empty
                Dim pers As InfosPersonnes
                Do
                    Ligne = TXT.ReadLine
                    If Ligne.Equals(String.Empty) Then
                        Exit Do
                    Else
                        pers = New InfosPersonnes(Ligne.Split(";"c))
                        Personnes.Add(pers)
                    End If
                Loop
            End Using
        End Sub

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour ta réponse.

    Cela fonctionne nickel

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Points : 478
    Points
    478
    Par défaut
    Citation Envoyé par rocca0909 Voir le message
    Merci beaucoup pour ta réponse.

    Cela fonctionne nickel
    De rien et pense à passer le thread en

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

Discussions similaires

  1. Insertion dans MySQL depuis fichier texte /bash
    Par mitchreward dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 27/08/2013, 10h27
  2. Remplir JTable avec un fichier texte
    Par da_latifa dans le forum Débuter
    Réponses: 6
    Dernier message: 19/04/2013, 13h35
  3. [WD-2003] Publipostage depuis fichier texte
    Par olibara dans le forum Word
    Réponses: 22
    Dernier message: 09/07/2010, 13h08
  4. Réponses: 2
    Dernier message: 23/12/2009, 10h03

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