Aller au contenu

Petit problème avec les chaines de caractères


DenisHen

Messages recommandés

M'enfin ?

 

J'ai collé ça dans mon LiSP des commandes communes qui est toujours charger :

;;Transforme une chaine de caractère en 'Nom propre', majuscule au premier caractère
(defun NomPropre (Text / NomPropre)
 (setq NomPropre
        (strcat (strcase (substr Text 1 1)) (strcase (substr Text 2 (- (strlen Text) 1)) T))
 ) ;_ Fin de setq
 NomPropre
) ;_ Fin de defun

 

Et il ne fonctionne qu'une fois...

 

Il faut que je recharge mes LiSP pour qu'il fonctionne à nouveau... Et pour juste une fois...

 

Alors là, comrend pô...

 

PS : Alors là... J'ai changé de dessin et tout marche bien...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

j'ai remarqué que quand ça fait un moment qu'on est dans le débuggeur, ça arrive qu'il pète un peu les plomb et qu'il faille relancer autocad pour retrouver un comportement "normal"

 

Faut dire que j'y donne pas mal de boulot au débuggeur...

 

Il est intéressant ce tread... tu nous à fait faire un bon petit tour des embrouilles susceptible de nous arriver avec les chaines...

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Et il ne fonctionne qu'une fois...

Il faut que je recharge mes LiSP pour qu'il fonctionne à nouveau... Et pour juste une fois...

Alors là, comrend pô...

lors là, comrend pô...

Pour ton code de la réponse n°26, cela ne devrait pas, mais si par inadvertance tu rechargeais ton code de la réponse n°24 (ou qu'il se chargeait à la suite dans ton fichier) c'est tout à fait normal…

 

PS : Alors là... J'ai changé de dessin et tout marche bien...

Je pense que le ménage que tu as fait dans ton fichier Lisp a été bénéfique.

 

A+

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

Il est intéressant ce tread... tu nous à fait faire un bon petit tour des embrouilles susceptible de nous arriver avec les chaines...

 

GJulien, DenisH, x_all (et d'autres...), suivant votre envie et disponibilité biensur :)

 

Pour extrapoler et continuer sur les majucules/minuscules, je propose de coder:

 

Une généralisation "simple" de la fonction Nompropre, à savoir enrichir la fonction d'un argument nombre, pour fixer le nombre de caractère à mettre en majuscule:

_$ (casse "pUiSaRd" 0)
"puisard"
_$ (casse "pUiSaRd" 2)
"PUisard"
_$ (casse "pUiSaRd" 20)
"PUISARD"

 

Puis une fonction ChatMot (inspirer du CamelCase) pour mettre en majucule (les autres en minuscules) des lettres en fonction d'une liste de position.

_$ (chatmot "chatmot" '(1 5))
"ChatMot"
_$ (chatmot "PUISARD" '(2 4 6))
"pUiSaRd"
_$ (chatmot "puisard" '(1 3 5 7))
"PuIsArD"

 

Pour simplifier le code, les arguments seront supposé valide.

 

A+

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

Pour rebondir sur la proposition de VDH-Bruno :

 

J'avais, il y a un bout de sacré temps, fais un petit VBA dans Excel qui faisait exactement la même chose que la fonction "NOMPROPRE" des Excel de maintenant.

 

Il mettait en majuscule tous les premiers caractères des mots envoyés, exemple : "jean-paul sartre" revenait "Jean-Paul Sartre"...

 

Mais je n'arrive pas à remettre la main dessus... Vu qu'Excel a maintenant une fonction pour ça...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

J'avais, il y a un bout de sacré temps, fais un petit VBA dans Excel qui faisait exactement la même chose que la fonction "NOMPROPRE" des Excel de maintenant.

Il mettait en majuscule tous les premiers caractères des mots envoyés, exemple : "jean-paul sartre" revenait "Jean-Paul Sartre"...

Mais je n'arrive pas à remettre la main dessus... Vu qu'Excel a maintenant une fonction pour ça...

 

Alors rapidement pour l'exemple sans chercher à optimiser le traitement, une formulation possible en Lisp de ton énoncé, si des fois tu retrouvais ta fonction VBA et que tu voulais faire un comparatif :rolleyes:

(defun Nompropre (str / lst flag)
 (apply 'strcat
        (mapcar '(lambda (x)
                   (setq x    (strcase (substr str 1 1) flag)
                         str  (substr str 2)
                         flag (not (wcmatch x "`-, "))
                   )
                   x
                 )
                (repeat (strlen str) (setq lst (cons T lst)))
        )
 )
)

 

Teste

_$ (Nompropre "jean-paul sartre")
"Jean-Paul Sartre"
_$ 
_$ (Nompropre "JEAN-PAUL SARTRE")
"Jean-Paul Sartre"
_$

 

A+

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Merci VDH-Bruno, c'est exactement ça, mais c'est beaucoup plus long en VBA, d'après mes souvenirs...

 

Maintenant, et dans un souci de "perfection" et pour continuer dans les chaines de caractères...

 

(Et surtout qu'au mois d'août, on bulle toujours un peu, il me reste donc du temps pour mon "entretient PC/Logiciel" d'été)

 

J'ai aussi fais une petite ligne de code qui regarde le nombre de décimales dans une chaine. Ainsi, je reste homogène dans mes résultats avec les données fournies et/ou existantes :

(setq NbDec (- (strlen Ztn) (vl-string-position (ascii ".") Ztn) 1))

 

J'ai donc cette phrase là pour mes calculs :

(setq Resultat(rtos Variable 2 NbDec))

 

Au plaisir,

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

c'est le "(mapcar '(lambda " qui fait des miracle...

mapcar est magique, mais c'est vrai que j'ai du mal aussi... enfin c'est surtout lambda je crois qui me perturbe..

 

Non pas magique, car le mapcar n'est vraiment pas nécessaire dans ce cas, il oblige à la construction d'une liste au moyen de repeat pour être appliqué, avec while ça fonctionne certainement mieux, donc merci pour ton observation ;)

 

(defun Nompropre (str / lst flag)
 (while (/= ""
            (setq lst  (cons (strcase (substr str 1 1) flag) lst)
                  flag (not (wcmatch (car lst) "`-, "))
                  str  (substr str 2)
            )
        )
 )
 (apply 'strcat (reverse lst))
)

 

A+

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

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é