Aller au contenu

Convertir du string pour utiliser la fonction angtof


Messages recommandés

Posté(e)

Bonjour à tous

 

J'ai une variable string qui est = à 12d34'56"

 

je veux utiliser la commande angtof pour convertir mon angle qui est en string en Radian.

 

Gile m'a dit sur un autre Post cette remarque:

Pour les degrés sexagesimaux (comme pour les unités géodésiques) angtos ne reconnait que les chaînes dont le format est : "12d36'50""

 

Ma question

Dois-je mettre absolument des guillement avant et après ma variable ou les guillemet indique que c'est une variable String (texte)

 

Si je dois mettre ces guillemets comment faire ??? J'essais d'en mettre mais rien ne fonctionne, le code devient tout en rose.

 

((= nb_c 7)

(strcat ""

(substr AngleDMS 1 2)

"d"

(substr AngleDMS 4 2)

"'"

(substr AngleDMS 6 2)

"\""

)

)

 

 

J'ai essayé de faire cette commande et j'arrive toujours à la mauvais réponse

 

(princ (angtof result)) = 1.3512 si result = 12d34'56"

Je devrais arriver à 0.2196

 

 

merci de votre aide

Posté(e)

Bonjour ElpanovEvgeniy

 

Je sais que la façon de faire est : (angtof "12d34'56\"")

 

Pourquoi si ma variable qui est en string et vaut12d34'56" ne me donne pas le bon résultat.

 

Mon code pour voir le résultat de result

(princ (angtof result))

 

De plus que vaut le "\" ?

 

Ma variable result devrait valoir : 12d34'56\" ?

 

Merci de ton aide.

 

 

[Edité le 14/10/2009 par jfcantin1977]

Posté(e)

Euh,,, je veux pas me méler mais mets bien tes points d'interrogation, toute la ponctuation et des phrases très clair car Eugène utilise un traducteur pour lire nos messages en Français :cool:

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

> Tramber

Merci :)

 

> jfcantin1977

 

(setq a(angtos 0.219601 1 4))

(setq d (atoi a))
(setq m (if (setq i (vl-string-search "d" a))
        (atoi (substr a (+ 2 i)))
        0
       ) ;_  if
) ;_  setq
(setq s (if (setq i (vl-string-search "'" a))
        (atof (substr a (+ 2 i)))
        0.
       ) ;_  if
) ;_  setq

(setq str (strcat (rtos d 2 0) "d" (rtos m 2 0)"'" (rtos s 2)"\""))

(progn (princ str) (princ)) 

Evgeniy

Posté(e)

Bonjour

 

merci pour le code.

 

Le probleme est que je ne dois pas mettre une valeur connu

(setq a(angtos 0.219601 1 4))

 

C'est l'utilisateur qui choisira l'angle.

 

[surligneur] Mon but est de convertir une variable texte (un angle) en varible numérique.[/surligneur]

[surligneur] Ensuite, de prendre la variable numérique et la transformer en Radian.[/surligneur]

 

L'angle 12d34'56" est seulement un exemple.

 

Ton code = 77d25'4.00" ?

 

Merci

 

Do you speak in english ?

 

 

Posté(e)

Re,

 

Je ne suis pas sûr de comprendre mais une chaîne de caractères est une suite de caractères (imprimables ou non) comprise entre guillemets.

 

Si la chaîne contient des guillemets, pour que l'interpréteur que ces guillemets ne balisent pas le début ou la fin d'un chaîne, il faut les faire précéder du caractère d'échappement : une barre oblique inverse ou underscore (\).

(setq a "12d34'56\"")

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Bonjour à vous deux.

 

Je veux que l'utilisateur entre une angle dans Autocad.

L'utilisateur entrera une angle dans ce format:

Degré.MinuteSeconde

Par exemple: 12.3456

 

L'utilisateur fera la touche Enter.

 

Je veux dans mon code qu'il transforme la valeur entré par l'utilisateur et de faire le Raidan de cet angle.

 

Donc dans mon exemple je veux arriver à un résultat du Radian de l'angle de 12d34'56" = 0.2196

 

J'aurias une variabl qui aura cette valeur (0.2196)

et une ligne qui affichera la réponse dans Autocad.

 

Mon problème est que je ne sais pas comment convertir mon angle de départ en Radian

 

Voici une partie du code. La variable result = 12d34'56"

 

((= nb_c 7)

(strcat ""

(substr AngleDMS 1 2)

"d"

(substr AngleDMS 4 2)

"'"

(substr AngleDMS 6 2)

"\""

)

)

(princ (angtof result))

 

 

 

 

Est-ce plus clair ?

 

Merci

 

 

Posté(e)

Eugène ne va pas comprendre le rapport avec les petites culottes. Restons intègres et entiers. Faisons une chaîne et soyons réels !

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Re,

 

Je t'avais donné une routine qui transforme ton format DD.MMSS en radians ici (DMS2Rad).

 

Il suffit de charger cette routine pour pouvoir l'utiliser comme une fonction LISP native.

La fonction DMS2Rad requiert comme argument une chaîne du type "DD.MMSS".

 

(DMS2Rad "12.3456") retourne 0.219601

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Bonjour Gile

 

J'ai effectivement essayé ta routine mais étant donnée que je ne saisi pas encore compléteemnt le Lisp je n'arrive pas a utiliser ta fonction...

 

J'ai donc essayé un autre truc qui changait ma variable pour être traité comme un numérique mais je n'y arrive pas... Donc.... Revenons à ta routine.

 

1. Comment coder pour entrer dans ta routine ?

J'ai vu dans l'autre post que tu me disais de remplacer la variable

 

Remplace :

(DMS2Rad)

par :

(DMS2Rad AngleDMS)

 

2. Quel est la variable qui contient mon angle modifé par ta routine ?

 

Merci de ton aide

 

 (defun c:Jeff ()
  (setq AngleDMS (getstring "\n Entrez une Angle DD.MMSS: "))
)

  (defun DMS2Rad AngleDMS (str / pos)
 (setq pos (vl-string-search "." str))
 (angtof
   (strcat (substr str 1 pos)
           "d"
           (substr str (+ 2 pos) 2)
           "'"
           (substr str (+ 4 pos) 2)
           "\""
   )
   1
 )
)

Posté(e)

Re... J'arrive à une erreur.....

 

Je te remontre le code avec l'ajout que tu m'a proposé. Mais je ne dois pas l'avoir mis au bon endroit...

 

Merci vraiment poutr ton aide

 

 (defun c:Jeff ()

(setq AngleDMS (getstring "\n Entrez une Angle DD.MMSS: "))

(setq AngleRad (DMS2Rad AngleDMS))

(princ AngleRad)

)

  (defun DMS2Rad AngleDMS (str / pos)
 (setq pos (vl-string-search "." str))
 (angtof
   (strcat (substr str 1 pos)
           "d"
           (substr str (+ 2 pos) 2)
           "'"
           (substr str (+ 4 pos) 2)
           "\""
   )
   1
 )
)

Posté(e)

Il ne faut pas modifier la routine DMS2Rad (elle fonctionne telle que je te l'ai donnée).

 

(defun c:Jeff (/ AngleDMS AngleRad)
 (setq AngleDMS (getstring "\n Entrez une Angle DD.MMSS: "))
 (setq AngleRad (DMS2Rad AngleDMS))
 (princ AngleRad)
 (princ)
)

(defun DMS2Rad (str / pos)
 (setq pos (vl-string-search "." str))
 (angtof
   (strcat (substr str 1 pos)
           "d"
           (substr str (+ 2 pos) 2)
           "'"
           (substr str (+ 4 pos) 2)
           "\""
   )
   1
 )
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Salut merci ...

 

 

J'arrive au même résultat qu'avant soit 1.3512 et non à 0.2196

 

toujours en prenant l'exemple que l'utilisateur mets un angle de 12.3456

 

Le problème vient-il du fait que la fonction angtof ne gère pas une variable "modifiée" ?

 

 

merci encore

Posté(e)

Salut

 

Le problème peut-il venir du "Setting" d'Autocad ?

 

Pourquoi arrives-tu au bon résultat ?

 

J'ai fais un copier coller du code et j'arrive toujours à 1.3512

 

Enfin, si tu vois une piste où je pourrais vérifier...

 

 

Merci de ton aide

Posté(e)

D'accord... et si j'essais de passer à côté de ce porblème et que j emodifie mon angle avec la routine à Gile et ensuite je calcul pour convertir mon angle en Radian..

 

Ce que j'ai essayé depuis 15 minutes... et devinez quoi... ca fonctionne pas... :(

 

Pouvvez-vous me dire pourquoi ca ne fonctionne pas et ou ce que je fais est-il réalisable ???

 

Merci de votre aide c'est tres apprécié

 

P.S. Voici le message d'erreur que j'ai:

#; error: bad argument type: numberp: "12d34'56\""

 

 (defun jeff_convert (str / pos)
 (setq pos (vl-string-search "." str))
 (strcat ""
         (substr str 1 pos)
         "d"
         (substr str (+ 2 pos) 2)
         "'"
         (substr str (+ 4 pos) 2)
         "\""
 )
)

(defun c:jeff (/ AngleDMS)
 (setq AngleDMS (getstring "\n Entrez une Angle DD.MMSS: "))
 (setq AngleModif (jeff_convert AngleDMS))
 (setq AngleRad (d2r AngleModif))
 (princ AngleRad)
 (princ)
)


; conversion des degrés en radians
(defun d2r (AngleModif)
(* (/ AngleModif 180.0) pi)
)

 

[Edité le 15/10/2009 par jfcantin1977]

Posté(e)

Ça ne fonctionne pas parce que tu passe une chaine (AngleModif) à la fonction d2r qui requiert un nombre.

 

Ce que tu veux faire est certainement possible, mais difficile à comprendre et au dessus de ton niveau en LISP au vu des erreurs que tu fais.

 

(defun Jeff2Rad (a / p)
 (setq p (vl-string-position 46 a))
 (* (/ pi 180.)
    (+ (atoi (substr a 1 p))
       (/ (atoi (substr a (+ 2 p) 2)) 60.)
       (/ (atoi (substr a (+ 4 p) 2)) 3600.)
    )
 )
)

(defun c:Jeff (/ AngleDMS AngleRad)
 (setq AngleDMS (getstring "\n Entrez une Angle DD.MMSS: "))
 (setq AngleRad (Jeff2Rad AngleDMS))
 (princ AngleRad)
 (princ)
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité