spopol
Messages postés5Date d'inscriptionjeudi 9 avril 2009StatutMembreDernière intervention21 avril 2009
-
9 avril 2009 à 17:55
spopol
Messages postés5Date d'inscriptionjeudi 9 avril 2009StatutMembreDernière intervention21 avril 2009
-
21 avril 2009 à 11:51
Bonjour,
j'ai un fichier texte qui commence ainsi:
Nervure 4 Corde : 166.85
1.0000000 0.0000000
0.9965500 0.0004661
0.9864900 0.0020560
0.9704900 0.0049535
le but etant de passer la premiere ligne
et de couper les lignes suivantes ainsi (elle sont toutes calibré de la meme façon 9 caracteres+3espaces+9caracteres)
les 9 premiers caracteres dans le tablo x(i) et les 9 derniers dans le tablo y(i)
j'ai récupérer ce code qui lit bien le fichier de ligne a ligne mais je n'arrive pas a charger mes 2 tablos:
merci pour votre aide
Dim numFile As Long
numFile = FreeFile
Open "C:\\ASK-18\profils\e205&e211N04.dat" For Input As #numFile
While Not EOF(numFile)
Line Input #numFile, sTemp 'récupère une ligne entière
T_x = Split(sTemp, " ") 'découpe la chaine selon les espaces
'tablo = Split(sTemp, vbTab)'découpe la chaine selon les tabulation
For i = LBound(T_x) To UBound(T_x)
' Faire quelque chose avec la donnée tablo(i)
MsgBox T_x(i)
Next i
Wend
Close #numFile
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 9 avril 2009 à 19:42
Salut
Déjà, le format du chemin de ton fichier, avec le double \\ en tête, est bien bizarre.
Si tu dois sauter la première ligne, il faut la lire et l'ignorer avant de commencer la boucle
Après ton Split, tu récupères T_x(0) et T_x(1) : pourquoi te faire suer avec le LBound - UBound ?
Une fois que tu as ces deux données, que veux-tu en faire ?
Si tu dois constituer un tableau avec toutes les lignes, il faut en créer un autre.
T_x n'est qu'un tableau temporaire qui ne comportera jamais rien d'autre que 2 items, ceux de la dernière ligne que tu viens de lire.
genre :
Dim TableauTotal() As String
Avec cette déclaration, la (ou les) dimension du tableau ne sont pas dédinies
En supposant que ton tableau ait cette forme :
TableauTotal(0 To ??, 0 To 1)
Le 0 To ?? seraient les enregistrements de la ligne
Et 0 To 1 seraient les deux variables de chaque ligne
Le ?? désignera la dimension globale de ton tableau.
Comme tu ne le connais pas à l'avance, il te faudra utiliser ReDim
Il faudra donc compter les lignes, de 0 à X, en incrémentant un compteur dans ta boucle (iCompteur).
Avant d'associer les données, le ReDim :
ReDim Preserve TableauTotal(0 To iCompteur, 0 To 1)
(le Preserve est là pour éviter le vidage du tableau)
puis entrer les données récupérées
TableauTotal(lCompteur, 0) = T_x(0)
TableauTotal(lCompteur, 1) = T_x(1)
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 9 avril 2009 à 19:46
PS : Le Split ne fonctionne qu'avec des String
Alors, bien que les données ressemblent à des Single, il faudra dimensionner T_x en String
Par contre, TableauTotal peut être dimensionné en Single, en utilisant les outils de conversion adéquats (CSng) lors de l'écriture des données
spopol
Messages postés5Date d'inscriptionjeudi 9 avril 2009StatutMembreDernière intervention21 avril 2009 10 avril 2009 à 09:46
bonjour,
merci beaucoup pour tes reponses cela m'eclaire grandement
pour ce qui concerne le double slash ce n'est pas important j'ai racourci le chemin pour demander de l'aide et j'ai pas fait gaffe de retirer le slash qui est en trop
en fait ces données sont des coordonnées de points (abscisses et ordonnées) une fois dans mon tableau je recupere ces coordonnées pour dessiner le nuage de point et les relier avec une ligne tout ceci dans une macro vb autocad 2004,
j'ai reussi la suite de la macro (partie dessin mais je n'arrivais pas a trouver les syntaxes pour lire le fichier txt et mettre dans un tableau les valeurs) la derniere fois que j'ai fait du vb c'été la version visual basic 3.1 il y a for for lointain !
jusqu'a present je reprenais le fichier txt dans le note pad pour mettre les coordonnées sous cette forme :
corde = 168.86
T_x = Array(1, 0.99655, 0.98649, 0.97049, 0.94916, 0.92285, 0.89175, 0.85624, 0.81684, 0.77412, 0.72866, 0.68108, 0.63204, 0.58218, 0.53217, 0.48265, 0.4341, 0.3868, 0.34101, 0.29699, 0.25496, 0.21508, 0.17764, 0.14302, 0.11157, 0.0836, 0.05937, 0.03909, 0.02292, 0.01097, 0.00331)
spopol
Messages postés5Date d'inscriptionjeudi 9 avril 2009StatutMembreDernière intervention21 avril 2009 10 avril 2009 à 15:49
bonjour,
j'ai modifier mon prog comme vous me l'avez conseillé
Dim numFile As Long
Dim TextLine As String
Dim Tableautemp() As String
Dim TableauTotal() As String
i = 1
k = 1
numFile = FreeFile
Open "C:\ASK-18\profils\e205&e211N05.dat" For Input As #numFile
While Not EOF(numFile)
Line Input #numFile, sTemp 'récupère une ligne entière
Tableautemp = Split(sTemp, " ") 'découpe la chaine selon les espaces
'tablo = Split(sTemp, vbTab)'découpe la chaine selon les tabulation
If k > 1 Then 'permet de sauter 1ere ligne et k va me permettre d'avoir le nbre d'enrgistrement de mon tableau
ReDim Preserve TableauTotal(0 To i, 0 To 1)
MsgBox i
TableauTotal(i, 0) = Tableautemp(0)
TableauTotal(i, 1) = Tableautemp(1)
i = i + 1
'MsgBox T_x(i)
End If
k = k + 1
Wend
Close #numFile
pb c'est que lors du second passage j'ai se message
Erreur d'execution '9':
l'indice n'appartient pas à la selection
en fait des que i est incrementé je vois pas pourquoi. un tableau se remplit bien ainsi ? ou ai je vraiment tout oublié ?!
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 11 avril 2009 à 18:14
Re
Pour lire et ne pas traiter la première ligne, supprime ton 'k' qui complique tout et ajoute cette ligne :
Open "C:\ASK-18\profils\e205&e211N05.dat" For Input As #numFile
Line Input #numFile, sTemp ' Lit la 1ere ligne sans la traiter
While Not EOF(numFile)
Le tableauTotal est dimensionné de 0 à X : i devrait avoir la valeur 0 au démarrage, pas 1.
Impossible de lire une image située sur ton PC : Il faut que l'image que tu proposes en lecture dans ce forum soit accessible de tous, sur un site perso, par exemple.
Le bug a lieu sur quelle ligne ?
Que vaut 'i' au moment du bug ?
Quelle est le plus grand indice de TableauTotal ? --> UBound(TableauTotal)
Quelle est le plus grand indice de TableauTemp ? --> UBound(TableauTemp)
car, pour ce dernier, s'il n'y a pas suffisemment de donnée dans la ligne lue, il se peut que le Split n'ait qu'une donnée au lieu de 2 --> Problème de séparateur ou autre
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
spopol
Messages postés5Date d'inscriptionjeudi 9 avril 2009StatutMembreDernière intervention21 avril 2009 14 avril 2009 à 09:27
bonjour
merci encore une fois pour votre reponse;
je ne laisse pas tombé mais j'ai plus de boulot cette semaine donc je ne sais pas si je vais avoir le temps de regarder cela. je vous tiendrai au courant de l'evolution de mes avancés.
spopol
Messages postés5Date d'inscriptionjeudi 9 avril 2009StatutMembreDernière intervention21 avril 2009 21 avril 2009 à 11:51
bonjour,
j'ai eu un peu plus de temps ce we pour bosser sur mon script
j'ai fini par abandonner les tableaux effectivement comme vous me le signalez dans votre dernier post le split n'avait pas forcement 2 données
j'ai repris la bonne vieille methode du left en right qui a le merite de fonctionner
j'ai du revoir aussi la conception de mon script (j'aime bien proceder par ordre pour une question de maintenance) et au lieu de proceder par etape (recuperation des données puis faire traitement sur données) je fais tout en un.
voila si ça peut interesser du monde le script final :
Sub Example_Copy()
Dim point1(0 To 2) As Double, point1old As Double
Dim point2(0 To 2) As Double, point2old As Double
Dim i, j, k As Integer
Dim corde As Double
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
Dim numFile As Long
Dim chemin As String
chemin = "C:\ASK-18\profils\e211.dat"
unefois = True
corde = 300
numFile = FreeFile
Open chemin For Input As #numFile
Line Input #numFile, sTemp ' Lit la 1ere ligne sans la traiter
While Not EOF(numFile)
Line Input #numFile, sTemp 'récupère une ligne entière
If unefois = True Then
point1old = c_x
point2old = c_y
unefois = False
Else
' Definie le debut et la fin des points pour la ligne startPoint(0) point1old: startPoint(1) point2old: startPoint(2) = 0# endPoint(0) c_x: endPoint(1) c_y: endPoint(2) = 0#
' crée la ligne dans l'espace modele
Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)
point1old = c_x
point2old = c_y
End If
Close #numFile
ZoomAll 'evite d'avoir un point sur l'espace dessin
MsgBox "dessin executé.", , "Macro Profil"
End Sub
encore une fois merci beaucoup pour votre aide !
je n'hesiterai pas a vous recontacter si j'ai de nouveau besoin, je desesperai de trouver un forum avec des reponses intelligentes et pas du genre "tu lui a pas dit svp et merci"