Lecture de fichier et conversion en tableau [Résolu]

Messages postés
43
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
6 septembre 2007
- - Dernière réponse : mortalino
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
- 17 août 2007 à 17:53
Bonjour,

Je suis en train de faire un programme qui doit lire dans un fichier texte composé à partir d'une certaine ligne de données sous la forme:
B=1.556 A=3.222 P=2.333
B=2.333 A=2.333 P=2.333
etc

J'arrive à récupérer les lignes de mon fichier. Ensuite j'arrive pour une ligne myLines(i) à la découper en plusieurs parties avec Split( ) et à récupérer les valeurs numériques des string obtenus  avec Val( ).
Par contre je ne comprend pas trop comment faire le faire plusieurs fois et ainsi créer 3 tableau de double B, A et P...

Si vous avez des idées, merci.
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
46
3
Merci
Salut,
Regarde ce que fait ceci pour te donner l'idee.
J'ai pas fait de fonction ou de boucle mais l'idée est la
Option Explicit

Private Type Donnees
   A As Single
   B As Single
   P As Single
End Type

Dim TabDonnees() As Donnees

Private Sub Form_Load()
Dim ligne As String
Dim tmpType As Donnees
ligne = "B=1.556 A=3.222 P=2.333"
ReDim TabDonnees(0)
With tmpType
   .B = Split(Split(ligne, " ")(0), "=")(1)
   .A = Split(Split(ligne, " ")(1), "=")(1)
   .P = Split(Split(ligne, " ")(2), "=")(1)
End With

TabDonnees(UBound(TabDonnees)) = tmpType
ReDim Preserve TabDonnees(UBound(TabDonnees) + 1)

ligne = "B=2.333 A=2.333 P=2.333"
With tmpType
   .B = Split(Split(ligne, " ")(0), "=")(1)
   .A = Split(Split(ligne, " ")(1), "=")(1)
   .P = Split(Split(ligne, " ")(2), "=")(1)
End With

TabDonnees(UBound(TabDonnees)) = tmpType
ReDim Preserve TabDonnees(UBound(TabDonnees) + 1)

Stop

End Sub , ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 137 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jrivet
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
salut,

autre possibilité avec le snippet de pcpt :

Option Explicit

' Snippet de
PCPT
'
http://www.codyx.org/snippet_split-sur-plusieurs-criteres_233.aspx

Function MultiSplit(ByVal sStr As String, bKeepSepar As Boolean, ParamArray aArray()) As String()
'    sStr        -> chaîne à  parser
'    bKeepSepar  -> garder ou non les  caractères de
référence
'    aArray      ->  tableau des
références de taille variables
    Dim sCol As New Collection
    Dim sChar          As String, sLeft As String
    Dim bFound         As Boolean
    Dim aRes()         As String
    Dim i              As Integer, j As Integer, NbCarac As
Integer
    i = 0
    
    While LenB(sStr) > 0
        i = i + 1
        bFound = False
        For j = LBound(aArray) To UBound(aArray)
            NbCarac = Len(aArray(j))
            sChar = Mid$(sStr, i, NbCarac)
            If sChar = CStr(aArray(j)) Then bFound = True: Exit
For
        Next j
        If bFound Then
            sLeft = Left$(sStr, i - 1)
            If LenB(sLeft) > 0 Then sCol.Add sLeft
            If bKeepSepar Then sCol.Add sChar
            sStr = Right$(sStr, Len(sStr) - (NbCarac + (i - 1)))
            i = 0
        ElseIf sChar = vbNullString Then
            sCol.Add sStr
            sStr = vbNullString
        End If
    Wend
    ReDim aRes(sCol.Count - 1)
    For i = 1 To sCol.Count
        aRes(i - 1) = sCol.Item(i)
    Next i
    MultiSplit = aRes
    
    Set sCol = Nothing
    Erase aRes
End Function

'  EXEMPLE  D'UTILISATION
Private Sub Form_Load()
    Dim a$(), i%
    a = MultiSplit("B=1.556 A=3.222
P=2.333", False, "B=", "
A=", " P=")
    For i = 0 To UBound(a)
        Debug.Print "_" & a(i) & "_"
    Next i
    Unload Me
End Sub

~
<small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique</small>

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Commenter la réponse de mortalino
Messages postés
43
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
6 septembre 2007
0
Merci
Merci pour les réponses. J'ai essayé la première méthode seulement en l'adaptant et ça marche très bien
Commenter la réponse de yabiyou
Messages postés
14
Date d'inscription
dimanche 12 novembre 2000
Statut
Membre
Dernière intervention
7 avril 2008
0
Merci
c'est bien ton code mortalino,
je fais la meme chose mais si dans le cas ou le fichier etait structuré en ligne comment ignorer le caractere de saut de ligne
merci 
Commenter la réponse de omarjock
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
salut,

avec comme valeur vbCrLf ou vbNewLine.

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Commenter la réponse de mortalino