VB6 Mettre une ligne dans un Tableau [Résolu]

cs_JeffC1977 929 Messages postés vendredi 10 novembre 2000Date d'inscription 10 septembre 2010 Dernière intervention - 11 juil. 2007 à 15:23 - Dernière réponse : cs_JeffC1977 929 Messages postés vendredi 10 novembre 2000Date d'inscription 10 septembre 2010 Dernière intervention
- 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


 
Afficher la suite 

15 réponses

Répondre au sujet
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 11 juil. 2007 à 17:24
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jmfmarques
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 11 juil. 2007 à 15:30
0
Utile
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.
Commenter la réponse de jmfmarques
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 11 juil. 2007 à 15:36
0
Utile
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
Commenter la réponse de Renfield
cs_JeffC1977 929 Messages postés vendredi 10 novembre 2000Date d'inscription 10 septembre 2010 Dernière intervention - 11 juil. 2007 à 15:36
0
Utile
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....
Commenter la réponse de cs_JeffC1977
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 11 juil. 2007 à 15:44
0
Utile
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.
Commenter la réponse de jmfmarques
cs_JeffC1977 929 Messages postés vendredi 10 novembre 2000Date d'inscription 10 septembre 2010 Dernière intervention - 11 juil. 2007 à 15:50
0
Utile
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....
Commenter la réponse de cs_JeffC1977
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 11 juil. 2007 à 15:53
0
Utile
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 ?)
Commenter la réponse de jmfmarques
cs_JeffC1977 929 Messages postés vendredi 10 novembre 2000Date d'inscription 10 septembre 2010 Dernière intervention - 11 juil. 2007 à 16:06
0
Utile
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
Commenter la réponse de cs_JeffC1977
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 11 juil. 2007 à 16:53
0
Utile
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)...


 
Commenter la réponse de jmfmarques
cs_JeffC1977 929 Messages postés vendredi 10 novembre 2000Date d'inscription 10 septembre 2010 Dernière intervention - 11 juil. 2007 à 17:03
0
Utile
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
Commenter la réponse de cs_JeffC1977
cs_JeffC1977 929 Messages postés vendredi 10 novembre 2000Date d'inscription 10 septembre 2010 Dernière intervention - 11 juil. 2007 à 18:04
0
Utile
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é... 
Commenter la réponse de cs_JeffC1977
cs_JeffC1977 929 Messages postés vendredi 10 novembre 2000Date d'inscription 10 septembre 2010 Dernière intervention - 11 juil. 2007 à 18:31
0
Utile
J'ai trouvé merci de ton aide
Commenter la réponse de cs_JeffC1977
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 11 juil. 2007 à 19:20
0
Utile
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
Commenter la réponse de jmfmarques
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 11 juil. 2007 à 19:31
0
Utile
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 !...)
Commenter la réponse de jmfmarques
cs_JeffC1977 929 Messages postés vendredi 10 novembre 2000Date d'inscription 10 septembre 2010 Dernière intervention - 11 juil. 2007 à 21:18
0
Utile
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
Commenter la réponse de cs_JeffC1977

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.