none
Substring et TXT RRS feed

  • Question

  • Bonjour,

    Je voudrais de l'aide (et le mot est faible) pour obtenir ceci

    J'ai bien repris les réponces de Mathieu et Gilles (Merci) mais la je bloque .


                    Longeur Fixe Position de 1 à 166                             Longeur Variable
    <-------------------------------------------------------><---------------------------------->
       Récupérer les valeurs du fichier TXT à partir de
                       la position 48                             Récupérer les valeurs
        
          Position  48 à  67 (Taille MAXI 20 Caractères)         A001BOO1COO1
          Position  68 à  77 (Taille MAXI 10 Caractères)         D001E001
          Position 126 à 127 (Taille Maxi 1 Caractère)           F001
              = Nb de valeur dans B


    Fichier txt :

    Ligne N° 1 :   56TGYH789IJHU555522TFGDC559911HHHHEETTY62244DCC2002002001010101011324567614455225566778812334455661144566556655443A001B001C001
    Ligne N° 2 :

    YDGSQDFSQIUF73289489JHEHFJEHGF848ZEDDDDDDFRZERE3003003002020202004455667712233224466777734554433222344444TTTT55FF2D001E001
    Ligne N° 3 : 

    EZFRE435315FRGERG58438543885HHGDHG490358934HHHR40040040030303030344556677ZSSSS44EERRTTYY22334455553Z44556EERR33331F001
    Etc......

    Résultat dans un Datagridview :

    200200200 10101010  A001
    200200200 10101010  B001
    200200200 10101010  C001
    300300300 202020200 D001
    300300300 202020200 E001

    lundi 28 juin 2010 09:53

Réponses

Toutes les réponses

  • Bonjour,

    Créez un DataSet contenant une DataTable qui modélise les données qui s'affichera dans votre DataGridView (les colonnes).

    Ensuite, lisez votre fichier ligne par ligne et pour chaque ligne, utilisez la méthoide String.Substring : http://msdn.microsoft.com/fr-fr/library/system.string.substring(VS.80).aspx pour extraire les portion que vous interesse. Alimentez ainsi votre DataSet et associez ce DataSet à un DataGridView...

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse bocboc lundi 28 juin 2010 22:31
    lundi 28 juin 2010 11:22
    Modérateur
  • Bonjour Gilles ,

    Merci pour tes explications qui mon vraiment mis sur le bon chemin.

       Dim myStream As Stream = Nothing
        Dim openFileDialog1 As New OpenFileDialog()
    
        openFileDialog1.InitialDirectory = "c:\"
        openFileDialog1.Filter = "Fichier Texte (*.txt)|*.txt*"
        openFileDialog1.FilterIndex = 2
        openFileDialog1.RestoreDirectory = True
        If openFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
          'ouverture du fichier txt avec la boite de dialogue
          myStream = openFileDialog1.OpenFile()
          'Découper le fichier de longeur fixe
          Using MyReader As New _
          Microsoft.VisualBasic.FileIO.TextFieldParser(openFileDialog1.OpenFile)
            MyReader.TextFieldType = _
        Microsoft.VisualBasic.FileIO.FieldType.FixedWidth
            MyReader.SetFieldWidths(2, 3, 5, 4, -1)
    
            While Not MyReader.EndOfData
              'Traitement de la partie de la liste variable
              Dim StaticRow As List(Of String) = New List(Of String)
              StaticRow.AddRange(MyReader.ReadFields)
              'Récupère les deux premiers caractères de la partie FIXE
              Dim DynamicsRow1 As String = StaticRow(0).Substring(0, 2)
              'le compteur est à la position 0
              Dim indexStartDynamicRow As Integer = (StaticRow(4).Substring(0, 1))
              'Récupère le nombre de code à découper 
              Dim counter As String = StaticRow(4).Substring(0, 1)
              'découpe les codes 
              Dim DynamicsRow As String = StaticRow(4).Substring(1)
              Dim nbField As Integer = Integer.Parse(counter.Replace("(", "").Replace(")", ""))
              StaticRow.RemoveAt(4)
              Dim i As Integer = 0
              Do While (i < nbField)
                DataGridView2.Rows.Add(DynamicsRow1 + ";" + (DynamicsRow.Substring((i * 4), 4)))
                i = (i + 1)
              Loop
              Try
                For Each field As String In StaticRow
    
                Next
    
              Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
                MsgBox("Line " & ex.Message & _
                "ceci n'est pas un fichier valide ")
              End Try
            End While
          End Using
          If (myStream IsNot Nothing) Then
          End If
        End If
    lundi 28 juin 2010 22:31