VB6 Mettre une ligne dans un Tableau

Résolu
cs_JeffC1977 Messages postés 928 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 23 septembre 2023 - 11 juil. 2007 à 15:23
cs_JeffC1977 Messages postés 928 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 23 septembre 2023 - 11 juil. 2007 à 21:18
Salut tout le monde...

J'ai un petit problème que je ne réussi pas à trouver.

J'utilise un fichier texte et sur ma premiere ligne du fichier texte je retrouve cette information;
3   -0.1355   39.9398   0.00000   50

Je veux que dans mon tableau sur ma premiere ligne je retrouve un ligne et 5 colonnes.
La premieres colonnes aura le chiffre 3
Deuxième colones aura -0.1355  
Troisième colonne aura 39.9398  
Quatrième colonne aura 0.00000  
Cinquième colonne aura 50

Je ne sais pas comment coder pour dire... prend l'info avant les espace et ca donne 3 ensuite reprendre l'info entre les espaces et sa donne -0.1355 et ainsi de suite.




ATTENTION Le code en gras est le code que je dois changer.
Je ne peux pas mettre de mid, right ou left car mon fichier ne saura pas toujours pareil... je dois utiliser les espaces pour remplir les variables.



Public Sub Parcourir_Fichier_text(aMesLignes)


    Dim i As Integer


    For i = 0 To UBound(aMesLignes)


    Point = Mid(aMesLignes(i), 70, 9) 'Première Colonne
    CoordX = Mid(aMesLignes(i), 70, 9)  'Deuxième Colonne
    CoordY = Mid(aMesLignes(i), 70, 9) 'Troisième Colonne
    CoordZ = Mid(aMesLignes(i), 70, 9)  'Quatrième Colonne
    Pcode = Mid(aMesLignes(i), 70, 9)  'Cinquième Colonne


    Next i



End Sub


 

15 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
11 juil. 2007 à 17:24
Je crois vraiment que la listview est toute indiquée et te faciliterait beaucoup de choses.


 


Mais c'est là ta décision :


 


Voilà donc un exemple commenté (j'ai simplifié en prenant d'emblée un tableau de 10 lignes et 5 colonnes)


Private Sub Command1_Click()
 Dim montableau(9, 4)
 toto = "aaaa bbbb ccc dddd eeee" ' ici la ligne lue dans ton fichier
 monsplit = Split(toto, " ") 'on éclate

Tu as là l'inscription de la 1èere ligne (0)
'Pour les suivantes il te faut incrémenter ce 0 (utilise un compteur)
 For i = 0 To UBound(monsplit)
   If Trim(monsplit(i)) <> "" Then
   montableau(0, i) = Trim(monsplit(i)) 'on écrit dans le tableau
   End If
 Next
 
'juste pour que tu voies ce qui a été inscrit en ligne 0
 For i = 0 To 4
   MsgBox montableau(0, i)
 Next
End Sub


Il te reste à utiliser un compteur (pour aller de 0 à 1, puis 2, etc...) et à redimensionner à chaque fois ton tableau.
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
11 juil. 2007 à 15:30
Utilise plutôt Split (sur l'espace) pour éclater ta ligne et, au besoin, Trim (pour supprimer les espaces)
Insère les résultats de l'rray obtenu dans ton tableau.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 juil. 2007 à 15:36
salut l'ami quebecois,

pense a remplacer tes espaces multiples, pour n'en faire qu'un, afin de pouvoir bien découper la chose a l'aide de Split
0
cs_JeffC1977 Messages postés 928 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 23 septembre 2023 4
11 juil. 2007 à 15:36
Salut...
J'y avait pensé mais je ne sais pas trop comment l'utiliser....

Peux-tu me odnner un coup de main, montre moi un bout de code lié à mon code...

merci d'avance....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
11 juil. 2007 à 15:44
Re,


Je veux bien continuer, mais (je commence à me méfier, ces temps-ci) : confirme-moi que tu es bien sous VB6 (la présente section) et qu'il s'agit d'un tableau dynamique (qu'il faudra donc redimensionner à chaque ajout) et pas sous VBA (avec un "tableau" Excel)... car le traitement n'est pas du tout le même.
0
cs_JeffC1977 Messages postés 928 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 23 septembre 2023 4
11 juil. 2007 à 15:50
Salut je suis bien en VB6 je ne connais pas encore tres bien les terme pour les tableau mais.... c'est un tableau  ou par exemple si j'ai un fichier texte de ce style;
3 -0.1355 39.9398 0.00000 50 
4 -0.2039 60.0697 0.00000 50 
11 29.8643 40.0416 0.00000 50 
12 29.7960 60.1715 0.00000 50 
17 7.5041 43.0157 0.00000 50 
18 19.0860 43.0550 0.00000 121

et bien le tableau aura sur sa premiere ligne toute l'info qui se trouve sur la premiere ligne du fichier texte (avec 5 colonnes bien sur). La deuxième ligne du tableau aura touta l'info de la deuxime ligne du fichier texte. Il y aura pas d'info qui pourra se retouver ailleur dans le tableau.
Je crois que je veux dire que le tableau n'est pas dynamique.. mais je ne suis pas certain....

merci de ton aide....
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
11 juil. 2007 à 15:53
Un tableau, sous VB6, contient des variables mais ne se VOIT pas.
Est-ce celà que tu as, ou autre chose (et quoi alors exactement ?)
0
cs_JeffC1977 Messages postés 928 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 23 septembre 2023 4
11 juil. 2007 à 16:06
oui oui je sais qu'il ne se voit pas... je me suis mal exprimé...

Ce que je veux dire c'est que mon tableau sera utilisé par rapport au premier chiffre de la ligne et si par exemple j'ai cette ligne dans mon fichier texte;
3 -0.1355 39.9398 0.00000 50 

et l'utilisateur aura rentrer le chiffre 3 dans un texte box et moi dans mon code j'utiliserai les information -0.1355 39.9398 0.00000 50  afin de faire des calcul.
c'est pour cela que la ligne doit etre "spliter" pour utiliser les varaibles...
Je voulais juste dire que l'info qui se retrouvre su la ligen 10 de mon fichier texte n'aura aucune relation possibel avec la ligne 2 de mon fichiers texte... tu comprends ??? Enfin....je vais te montrer un bout de code et c'est un tableau de ce style que j'utilise

Public TabNewStation() As String
Public TabVerticale() As String
Public TabDistance() As String
Public TabDisHor() As String
Public TabNewStationInst() As String
Public TabVerticaleInst() As String
Public TabDistanceInst() As String
Public TabDisHorInst() As String

For i = 0 To UBound(aMesLignes)


        If InStr(NewStation, ".") > 0 Then  'Si Station contient un "." Alors


            If LineCount = 0 Then                           'La condition est imposé car VB n'aime pas un tableau vide
                ReDim TabNewStation(LineCount)
                ReDim TabVerticale(LineCount)
                ReDim TabDistance(LineCount)
                ReDim TabDisHor(LineCount)
            Else
                ReDim Preserve TabNewStation(LineCount)        'Le tableau garde les 3 Colonnes et Ajoute une Ligne
                ReDim Preserve TabVerticale(LineCount)
                ReDim Preserve TabDistance(LineCount)
                ReDim Preserve TabDisHor(LineCount)
            End If


            'VERTICAL
            Vertical = Mid(aMesLignes(i), 70, 9)
            Vertical = Trim(Vertical)


            'Conversion de Vertical DMS en Degré Décimal
            Degres = CDbl(Fix(Vertical))
            Minutes = CDbl(Fix((Vertical - Degres) * 100))
            Secondes = CDbl((((Vertical - Degres) * 100) - Minutes) * 100)
            VerticalDecimal = CDbl((((Secondes / 60) + Minutes) / 60) + Degres)


            'DISTANCE
            Distance = Mid(aMesLignes(i), 82, 9)
            Distance = Trim(Distance)


            'ReDim Preserve TabNewStation(LineCount)




            TabNewStation(LineCount) = Trim(NewStation)    'Ajoute le No de Point dans la Colonne 0 Ligne X
            TabVerticale(LineCount) = Vertical      'Ajoute le Vertical dans la Colonne 0 Ligne X
            TabDistance(LineCount) = Distance      'Ajoute la Distance dans la Colonne 0 Ligne X
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
11 juil. 2007 à 16:53
Bien compliqué, tout celà, et je ne suis pas certain d'avoir tout bien compris de ton mécanisme.


Il me semble simplement que tu souhaites éclater chaque ligne de ton fichier texte sur 5 colonnes, en vue d'une exploitation ultérieure (calculs)


Je crois que dans de telles conditions, le plus simple serait d'utiliser une listview (ce qui permettra de ne pas avoir à redimensionner sans cesse)..contenant 5 colonnes.

Cette listview pourrait, à ton gré, soit être totalement invisible, soit visible (et ton utilisateur pourrait alors déclencher les calculs non plus en saisissant dans une textbox, mais tout simplement en cliquant sur la listview).

Si celà te tente, fais savoir et je te mets en place la chose dès mon retour de promenade (la mer)...


 
0
cs_JeffC1977 Messages postés 928 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 23 septembre 2023 4
11 juil. 2007 à 17:03
Salut à tois...  merci pour la suggestion c'est une bonne idée... mais ca ne peux pas fonctionner...

Je doit absolument "spliter" la ligne et mettre ce la dans un tableau...
Je vais essayer de t'expliquer ce que je veux en faire plus clairement... Mais selon moi c'est pas important mais si ca peux t'aider. Oublions pas que je veux de l'aide que pour spliter un ligne et mettre ca dans un tableau.

ok Donc l'utilisateur aura un fichier texte qui ressembel a ca
3 -0.1355 39.9398 0.00000 50 
4 -0.2039 60.0697 0.00000 50 
11 29.8643 40.0416 0.00000 50 
12 29.7960 60.1715 0.00000 50 
17 7.5041 43.0157 0.00000 50 
18 19.0860 43.0550 0.00000 121

Division la premiere ligne
3 = Numéro du Point
-0.1355 = Coordonnée X
39.9398  = Coordonnée Y
0.00000  = Altitude
50 = Code

Je veux que si l'utilisateur inscrit le chiffre 3 dans un textbox alors j'aura dans des label la coordonnée en X et en Y. Obligatoirement l'utilisateur devra renter un autre chiffre dans un autre textbox afin de faire des calculs. Ces coordonnée seront utilisé pour faire des calculs mathématiques... Exemple, trouver la distance entre deux points, ou le gisement entre deux points.

Alors mon problème est seulement le fait de "spliter une ligne (pour le moment) et de mettre dans dans une ligne et 5 colonnes...  voila...

merci de ton aide...

P.S. si c'est trop complexe fait moi signe... je refrai un autre post sur le Forum...Je nage un peu dans l'inconnu
0
cs_JeffC1977 Messages postés 928 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 23 septembre 2023 4
11 juil. 2007 à 18:04
c'est encore moi....

Hummmm ca sort un massage d'erreur.... je te montre mon code...

Public Sub Parcourir_Fichier_text(aMesLignes)


    Dim i As Integer
    Dim SplitLine As String
    For i = 0 To UBound(aMesLignes)


    SplitLine Split(aMesLignes, " ") Erreur d'exécution 13 Type incompatible


    Next i


End Sub

J'attends de ton aide...

P.S. merci pour tes commentaires tres aprécié... 
0
cs_JeffC1977 Messages postés 928 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 23 septembre 2023 4
11 juil. 2007 à 18:31
J'ai trouvé merci de ton aide
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
11 juil. 2007 à 19:20
Ouille...
J'étais parti voir la mer en me disant que tu avais tout, mais vois que tu as bataillé de ton côté...
Bravo

et tu mérites alors ceci, qui évite les redimensionnements sans cesse :

Private Sub Command2_Click()
  Dim montableau() As String
  moncompteur = 0
  Open "d:\essai.txt" For Input As #1 ' mets là ton chemin à toi.
    toto = Input$(LOF(1), #1)
  Close #1
  monsplit1 = Split(toto, vbCrLf)
  ReDim montableau(UBound(monsplit1), 4)
  For i = 0 To UBound(monsplit1)
   maligne = monsplit1(i)
   monsplit2 = Split(maligne, " ")
   For j = 0 To UBound(monsplit2)
     montableau(i, j) = monsplit2(j)
   Next j
  Next i

 'ce qui suit n'est que pour te permettre de vois ce qui a été écrit dans les 3 1eres lignes.
  For i = 0 To 2
    For j = 0 To 4
      MsgBox montableau(i, j)
    Next j
  Next i
End Sub
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
11 juil. 2007 à 19:31
Re-moi (décidément !...)

Je viens de vloir dans une autre discussion ouverte par toi, tes mots étaient séparés par des tabs et non par des espaces ...

Si c'est çà, fastoche :
Remplace tout simplement, dans le code plus haut :
monsplit2 = Split(maligne, " " )
par :
monsplit2 = Split(maligne, VbTab)

Pas de Replace à faire (ce n'est pas la peine !...)
0
cs_JeffC1977 Messages postés 928 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 23 septembre 2023 4
11 juil. 2007 à 21:18
ok merci bcp de ton j'ai fini pas réussir....

il y avait une mini erreur dans mon code versus ton code....

Bref ca marche merci de ta patience...

bye
0
Rejoignez-nous