Lecture de fichier ascii

flabrousse Messages postés 12 Date d'inscription jeudi 19 janvier 2006 Statut Membre Dernière intervention 22 mai 2006 - 31 janv. 2006 à 21:24
 Profil bloqué - 3 févr. 2006 à 08:00
Bonjour,

Je travaille sur un projet de crétion de macro sous Catia V5.
En gros je dois modéliser des sphères dont les coordonnées et leurs diamètres sont dans un fichier ascii.
Il se présente sous la forme suivante : X Y Z Diamètre Couleur


78,88 -57,90 11,60 6,87 rouge
112,21 -82,62 5,96 2,05 vert
0,26 -101,86 92,74 7,25 bleu
61,28 11,71 140,48 3,38 jaune
-1,94 -85,06 21,53 8,41 blanc
30,74 -142,18 91,01 6,02 noir
-118,76 35,80 -95,11 4,89 magenta
-86,51 86,21 -98,55 2,66 rouge


J'aimerais savoir plusieurs choses :
- comment choisir le chemin d'accés (par l'intermédiaire d'une boite de dialogue)
- comment lire le fichier afin de faire comprendre que le premier chiffre est X le deuxième est Y, ...

Je doit mettre ces valeurs dans les fonctions suivante :

Set hybridShapePointCoord1 = hybridShapeFactory1.AddNewPointCoord(X,Y,Z)
Set hybridShapeSphere1 = hybridShapeFactory1.AddNewSphere(reference1, Nothing, R, -45.000000, 45.000000, 0.000000, 180.000000)

Si quelqu'un peu me donner des infos pour ces differents problèmes faites moi signe.

9 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
31 janv. 2006 à 22:59
Bonsoir,

Excuse moi de te dire ca mais:

-comment choisir le chemin d'accés (par l'intermédiaire d'une boite de dialogue) : Ca c est pas trop a nous de te le dire, mais plutot a toi de le choisir(ou alors il te sera imposer)

- comment lire le fichier afin de faire comprendre que le premier chiffre est X le deuxième est Y, ...

Dim Maligne as string
Dim Mots() as string
Maligne = 78,88 -57,90 11,60 6,87 rouge

Mots = split(maligne, " ")

Resultat:
Mots(0) = contiendra les X
Mots(1) = contiendra les Y
Mots(2) = contiendra les Z
Mots(3) = contiendra les diametre
Mots(4) = la couleur

Tu t assureras simplement que les fichier soit bien ecrit (pas avoir de y a la place des x ...)
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
31 janv. 2006 à 23:07
Salut,

Je vois mal le rapport entre Catia v5 et vb.
L'exemple que tu présentes est un fichier texte, on peut le lire avec vb mais les fonctions que tu cites n'ont rien à voir avec vb.
Un peu plus d'explication STP.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
Profil bloqué
31 janv. 2006 à 23:23
Voici un exemple pour ligne les lignes du fichier


Private Sub Form_Load()


' données du fichier
' 78,88 -57,90 11,60 6,87 rouge
' 112,21 -82,62 5,96 2,05 vert
' 0,26 -101,86 92,74 7,25 bleu
' 61,28 11,71 140,48 3,38 jaune
' -1,94 -85,06 21,53 8,41 blanc
' 30,74 -142,18 91,01 6,02 noir
' -118,76 35,80 -95,11 4,89 magenta
' -86,51 86,21 -98,55 2,66 rouge


' On suppose que chaque ligne du fichier contient les informations pour une sphère
' Chaque paramètre de la sphère est séparé du suivant par un espace
' Le fichier s'appelle dans cette exemple D:\test.txt


Dim x As Single, y As Single, z As Single, d As Single
Dim couleur As String, fich As String, ligne As String
fich$ = "D:\test.txt" ' nom du fichier
Open fich$ For Input As 1 ' ouverture du fichier

While Not EOF(1)
Line Input #1, ligne$ ' lecture de chaque ligne du fichier
chaine$ = ""
For i% = 1 To Len(ligne$)
If Mid$(ligne$, i%, 1) = "," Then ' la virgule devient un point
chaine$ = chaine$ + "."
Else
chaine$ = chaine$ + Mid$(ligne$, i%, 1)
End If
Next i%
' Exemple : la première ligne
q% = InStr(chaine$, " ") ' position 1° espace
x! = Val(Left$(chaine$, q% - 1)) ' récupère 78,88 de la première ligne
chaine$ = Right$(chaine$, Len(chaine$) - q%)
q% = InStr(chaine$, " ") ' position 2° espace
y! = Val(Left$(chaine$, q% - 1)) ' récupère -57,90 de la première ligne
chaine$ = Right$(chaine$, Len(chaine$) - q%)
q% = InStr(chaine$, " ") ' position 3° espace
z! = Val(Left$(chaine$, q% - 1)) ' récupère 11,60 de la première ligne
chaine$ = Right$(chaine$, Len(chaine$) - q%)
q% = InStr(chaine$, " ") ' position 4° espace
d = Val(Left$(chaine$, q% - 1)) ' récupère 6,87 de la première ligne
couleur$ = Right$(chaine$, Len(chaine$) - q%) ' récupère la couleur
' Ici tu mets tes fonctions


Wend
Close #1 ' ferme le fichier
End Sub

GRENIER Alain
0
flabrousse Messages postés 12 Date d'inscription jeudi 19 janvier 2006 Statut Membre Dernière intervention 22 mai 2006
1 févr. 2006 à 07:12
Je tiens d'abord à vous dire merci pour vos réponse aussi rapide.

Je m'explique pour les quelques questions qui m'ont été posées.
* pour le chemin d'accés : je pense que le plus simple pour l'utilisateur est que lorsqu'il exécute la macro, une boite de dialogue s'ouvre lui demandant de spécifier le chemin d'accés du fichier de point(qui est différent du fichier catia sous lequel il travaille) par l'itermédiaire d'un bouton Parcourir puis OK.

* Le rapport entr Catia V5 et le VB c'est que je dois développer des macros pour rajouter des fonctionnalités un peu particuliaires, et que sous Catia on peu créer des macro en VBScrpit ou en CatScript(CatScript étant de Catia).

* Les fonctions, que j'ai présenté, sontpropre à Catia la première est celle qui me permet de généré un point(X,Y,Z) et la seconde est celle qui me crée une sphère de rayon R.

voila j'espère avoir répondu à vos questions. Je pense que j'aurais encore besoin d'aide car je n'y connais pas grand chose en programmation ? J'ai juste fais un peu de C++ jusqu'à maintenant.
0

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

Posez votre question
kalobit Messages postés 169 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 7 avril 2008 2
1 févr. 2006 à 11:23
Ha!
Ces %, ! et autres $, ça fait vraiment sale dans le code.

en plus, je vois pas l'interrêt de mettre fich$ alors que tu viens de déclarer Dim fich as string.

bon, je vais reprendre le script de galain qui est quand même très bien et je vais l'adapter à vbscript.

Ca donne donc, une fois supprimées les déclarations de type, virés les fonctions propres au VB et remplacées par des fonctions de vbscript, un ptit script testé avec plusieurs interpréteurs :
Const ForReading 1, ForWriting 2, ForAppending = 3 Const TristateUseDefault -2, TristateTrue -1, TristateFalse = 0

Dim x, y, z, d, q
Dim couleur, fich, ligne
Dim Chaine, Stream
Dim Fso
Dim fichier
fich = "c:\test.txt" ' nom du fichier

Set Fso = CreateObject("scripting.filesystemobject") 'création d'une instance de fso
Set fichier = Fso.getfile(fich)
Set Stream = fichier.OpenAsTextStream(ForReading, TristateUseDefault)

While Not Stream.AtEndOfStream
ligne = Stream.readline ' lecture de chaque ligne du fichier
Chaine = ""
For i = 1 To Len(ligne) If Mid(ligne, i, 1) "," Then ' la virgule devient un point Chaine Chaine + "."
Else
Chaine = Chaine + Mid(ligne, i, 1)
End If
Next
' Exemple : la première ligne
q = InStr(Chaine, " ") ' position 1° espace
x = Left(Chaine, q - 1) ' récupère 78,88 de la première ligne
Chaine = Right(Chaine, Len(Chaine) - q)
q = InStr(Chaine, " ") ' position 2° espace y Left(Chaine, q - 1) ' récupère -57,90 de la première ligne Chaine Right(Chaine, Len(Chaine) - q)
q = InStr(Chaine, " ") ' position 3° espace
z = Left(Chaine, q - 1) ' récupère 11,60 de la première ligne
Chaine = Right(Chaine, Len(Chaine) - q)
q = InStr(Chaine, " ") ' position 4° espace
d = Left(Chaine, q - 1) ' récupère 6,87 de la première ligne
couleur = Trim(Right(Chaine, Len(Chaine) - q)) ' récupère la couleur
' Ici tu mets tes fonctions
'MsgBox x + " " + y + " " + z + " " + d + " " + couleur 'ça c'est juste pour tester les valeurs
Wend
Stream.Close ' ferme le fichier

Voilà, pour récupérer le chemin du fichier, utilise une inputbox
et test avec fso.FileExists(chemin récupérer)

remarque, les valeurs retournées sont en format US (séparateur décimal Point). Si tu veux la virgule, remplace la première boucle For Next par chaine = ligne

+++
[mailto:K@lobit K@lobit]
0
kalobit Messages postés 169 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 7 avril 2008 2
1 févr. 2006 à 11:32
oups, attention, sur la ligne y Left(Chaine, q - 1) ' récupère -57,90 de la première ligne Chaine Right(Chaine, Len(Chaine) - q)

mon retour chariot à sauté, il faut remplacer par
y = Left(Chaine, q - 1) ' récupère -57,90 de la première ligne
Chaine = Right(Chaine, Len(Chaine) - q)

et pour le chemin de fichier

Fich = Inputbox( "Tapez le chemin du fichier de coordonnées","Importer des coordonnées","D:\test.txt")

rajoute ensuite après la création du fso

if fso.FileExists(fich) then

et termine le script par end if

Voilà, je pense qu'on a fait le tour de ton PB

+++ K@lobit
0
flabrousse Messages postés 12 Date d'inscription jeudi 19 janvier 2006 Statut Membre Dernière intervention 22 mai 2006
1 févr. 2006 à 15:08
Dans ma Inputbox j'aimerai rajouter un bouton parcourir afin d'aller selection le fichier que je veux ouvrir.
Car la ca marche nickel mais je suis obliger de connaitre tout le chemin
0
flabrousse Messages postés 12 Date d'inscription jeudi 19 janvier 2006 Statut Membre Dernière intervention 22 mai 2006
1 févr. 2006 à 15:38
En fait c'est bon j'ai trouver faire ma boite de dialogue
0
Profil bloqué
3 févr. 2006 à 08:00
Sans rancune kalobit
Mais je suis un vieux de la vieille (55 balais) et j'ai gardé les vieilles habitudes de Qbasic

GRENIER Alain
0
Rejoignez-nous