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 :

Créer un DataTable à partir d'un fichier texte


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 4
    Par défaut Créer un DataTable à partir d'un fichier texte
    Bonjour,

    Je souhaite créer une DataTable à partir d'un fichier texte, pour ensuite l'afficher dans un DataGridView

    Nom : Capture.PNG
Affichages : 531
Taille : 6,1 Ko

    Le fichier texte est formaté comme ci-dessus. Je ne sais pas comment faire pour créer un tableau à partir de ça en VB.NET car il n'y a aucun délimiteur,
    le nombre de lignes peut également changer.

    Pour l'instant j'ai toutes les lignes du tableau dans un StreamReader.

    Si quelqu'un a une idée de comment faire, ce serait génial.
    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Salut, bienvenue sur DVP

    Il serait plus pratique pour nous que tu nous fasses un copier/coller de ton fichier texte pour pouvoir procéder à des essais sans avoir a retaper ta capture d'écran, de plus, il y a peut être des caractères invisibles dans ton fichier texte.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonjour,

    S'il n'y a pas de délimiteur, c'est que tous les champs ont la même longueur et ils sont remplis par des "blancs" là où il n'y a pas de donnée.
    Dans ce cas, il "suffit" de compter les caractères pour extraire les différents champs. Le nom est en position 0 à partir de la troisième ligne, le total commence vers la position 25, ...

    Mais comme le propose ProgElect, si tu envoyais un extrait du fichier, on y verrait plus clair ...


  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 4
    Par défaut
    Bonjour,
    merci de votre réponse !

    Je mets le fichier en pièce-jointe

    L'extension du fichier est ".out" mais je pouvais que le joindre en .txt
    Fichiers attachés Fichiers attachés
    • Type de fichier : txt tab.txt (621 octets, 85 affichages)

  5. #5
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Re ...,

    L'illustration ci-dessous montre mon approche pour l'exrtraction des données.
    J'ai appliqué ces réflexions dans un programme "Console" dans lequel je crée le DataTable et le remplis par la lecture du fichier.
    Le contenu du DataTable est ensuite afficher pour contrôle (2ème illustration).

    Voici le code de ce programme :
    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    Module Module1
     
        Sub Main()
     
            Dim NomEtCheminDuFichier As String = "D:\Tmp\TXT_Table\tab.out"
            Dim FichierALire As System.IO.StreamReader
            Dim LigneLue As String
     
            If Not System.IO.File.Exists(NomEtCheminDuFichier) Then
                ' Erreur car fichier ininexistant
                ' Peut-être faire message ...
                Exit Sub
            End If
     
            '        ' Créer DataTable pour stockage des données
            Dim MesDonnees As New DataTable
            MesDonnees.Columns.Add("Champ1") ' Alcalase
            MesDonnees.Columns.Add("Champ2") ' Flavour
            MesDonnees.Columns.Add("Total") ' Total
            MesDonnees.Columns.Add("WihtSize") ' WithSize
            MesDonnees.Columns.Add("Valeur10") ' Valeur10
            MesDonnees.Columns.Add("Differencies") ' Differencies
     
            '        ' Ouvrir fichier en lecture
            FichierALire = New System.IO.StreamReader(NomEtCheminDuFichier)
     
            '        ' Lire 3 lignes sans traitement
            For i As Integer = 1 To 3
                FichierALire.ReadLine()
            Next
     
            '        ' Aquisition des données
            Dim PremierChamp As String
            Dim Champ2 As String
            Dim Total As String
            Dim WithSize As String
            Dim Valeur10 As String
            Dim Differencies As String
     
            '        ' Premième ligne
            LigneLue = FichierALire.ReadLine
            PremierChamp = LigneLue.Substring(1, 9)
     
            '        ' Traitement des donnée et lecture suivante
            While PremierChamp(0) <> "*"c
                Champ2 = LigneLue.Substring(12, 12)
                If Champ2 = "" Then Champ2 = vbTab ' Seulement pour un affichage correct en console
                Total = LigneLue.Substring(24, 10).Trim(" ")  ' Trim pour enlmever lers blancs d'extrémité, en vue conversion en numérique
     
                If LigneLue.Length > 48 Then
                    WithSize = LigneLue.Substring(33, 15).Trim(" ")
                    Valeur10 = LigneLue.Substring(48, 15).Trim(" ")
                    Differencies = LigneLue.Substring(62).Trim(" ")
                Else
                    WithSize = LigneLue.Substring(33).Trim(" ")
                    Valeur10 = ""
                    Differencies = ""
                End If
     
                MesDonnees.Rows.Add(PremierChamp, Champ2, Total, WithSize, Valeur10, Differencies)
     
                LigneLue = FichierALire.ReadLine
                PremierChamp = LigneLue.Substring(1, 9)
            End While
     
            FichierALire.Close()
            FichierALire.Dispose()
     
            ' Affichage en mode console (pour test) 
     
            For L As Integer = 0 To MesDonnees.Rows.Count - 1
                For C As Integer = 0 To MesDonnees.Columns.Count - 1
                    Console.Write(MesDonnees.Rows(L)(C) & vbTab)
                Next
                Console.WriteLine()
            Next
            Console.ReadKey()
     
        End Sub
     
    End Module
    Ci-joint, le projet complet pour que tu puisses tester : TXT_Table.zip.

    Bon amusement ...

    Nom : Alcalase.jpg
Affichages : 447
Taille : 171,3 Ko


    Nom : Alcalase2.jpg
Affichages : 425
Taille : 21,3 Ko

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 4
    Par défaut
    Re,

    Merci pour la réponse bien détaillée ! J'ai oublié de préciser un élément, en réalité le fichier tab.out que j'ai fourni est juste une partie d'un autre fichier bien plus grand, donc le tableau en question débute à la ligne 10547.

    Vu que le nombre de ligne peut changer à chaque fois, ça risque de poser problème car il faudrait plutôt détecter par exemple le mot clé "TOTAL" et passer à la ligne suivante pour commencer le traitement...

    Je pense que c'est pas très clair, mais je n'arrive pas à joindre le fichier entier car il est trop lourd...

  7. #7
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    ... tu as tous les outils en main.
    Rien ne t'empêche de passer 10000 lignes au lieu de 3, rien n'interdit de lire chaque ligne et en extraire +/- le 3ème champ pour vérifier s'il est "Total", ...
    C'est du bricolage mais ton fichier de lignes, sans séparateur, ne permet guère autre chose.
    ...
    )))

  8. #8
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonjour,

    Le code suivant te permettra de trouver la ligne TOTAL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            '        ' Va à la première ligne commençant par TOTAL (après les blancs)
            While FichierALire.ReadLine().Trim(" ").Substring(0, 5) <> "TOTAL"
            End While
            '        ' Passe la ligne de soulignements après TOTAL
            FichierALire.ReadLine()
    Mon code d'hier peut être modifié comme ceci :
    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
     
     
            ' ... ... ...
     
            '        ' Ouvrir fichier en lecture
            FichierALire = New System.IO.StreamReader(NomEtCheminDuFichier)
     
            ' ''        ' Lire 3 lignes sans traitement
            ''For i As Integer = 1 To 3
            ''    FichierALire.ReadLine()
            ''Next
     
            '        ' Va à la première ligne commençant par TOTAL (après les blancs)
            While FichierALire.ReadLine().Trim(" ").Substring(0, 5) <> "TOTAL"
            End While
            '        ' Passe la ligne de soulignements après TOTAL
            FichierALire.ReadLine()
     
            '        ' Aquisition des données
     
            ' ... ... ...
    J'ignore le temps que cela durera s'il y a 10000 lignes avant TOTAL mais ça devrait être assez rapide. Dis-moi ...

    Bonne journée,


  9. #9
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour
    A priori et au vu du fichier texte ,c'est un fichier texte "SDF"(sans délimiteur fixe).
    Il est justiciable de l'api .net :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Microsoft.VisualBasic.FileIO.TextFieldParser (filename as string)
    code exemple .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
    19
    20
    21
    22
    23
    24
     
    'Affectez à la propriété TextFieldType la valeur FixedWidth en définissant la largeur et le format. Le code suivant définit les colonnes de texte. La première a une 'largeur de 5 caractères, la deuxième de 10, la troisième de 11, tandis que la quatrième a une largeur variable.
     
     
     
    Using Reader As New _
    Microsoft.VisualBasic.FileIO.TextFieldParser("C:\TestFolder\test.log")
       Reader.TextFieldType = _
       Microsoft.VisualBasic.FileIO.FieldType.FixedWidth
       Reader.SetFieldWidths(5, 10, 11, -1)
       Dim currentRow As String()
       While Not Reader.EndOfData
          Try
             currentRow = Reader.ReadFields()
             Dim currentField As String
             For Each currentField In currentRow
                MsgBox(currentField)
             Next
          Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
             MsgBox("Line " & ex.Message & _
             "is not valid and will be skipped.")
          End Try
       End While
    End Using
    bon code...

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

Discussions similaires

  1. Créer un fichier .db a partir d'un fichier texte.
    Par Cyanatide dans le forum SQLite
    Réponses: 5
    Dernier message: 30/09/2010, 08h22
  2. Réponses: 5
    Dernier message: 23/03/2010, 22h03
  3. Créer un tableau à partir d'un fichier texte
    Par jchampen dans le forum Langage
    Réponses: 9
    Dernier message: 04/11/2008, 08h34
  4. créer un excel à partir d'un fichier texte
    Par titomiss dans le forum Modules
    Réponses: 1
    Dernier message: 21/09/2007, 09h55
  5. Réponses: 11
    Dernier message: 04/08/2003, 15h30

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