StrCase2

Lembram daquela exemplo do layers maiúsculos e minúsculos? me ocorreu que derrepente eu posso querer só a primeira letra maiúscula e o resto minúscula… ou invertido, sei lá… mas o strcase so faz dum jeito ou do outro… entao bolei na corrida isto:


(defun strcase2 (str opcao / tmp s)
(
cond
;tudo minusculo:
((or (equal t opcao)(= opcao “minus”))
(
strcase str t))
;tudo maiusculo:
((or (null opcao) (= opcao “maius”))
(
strcase str))
;primeira letra da sentença:
((= opcao “prma”)
(
setq str (strcase str t))
(
vl-string-subst
(strcase (substr str 1 1))
(
substr str 1 1) str))
;primeira letra de cada sentença em maiusculo:
((= opcao “plsm”)
(
setq str (strcase str t)
tmp nil)
(
repeat (strlen str)
(
setq s (substr str 1 1)
str (strcat (substr str 2 (strlen str))
(
strcase s tmp))
tmp (not (wcmatch s “*.*”))))
str)
;inverter tudo:
((= opcao “invr”)
(
repeat (strlen str)
(
setq s (substr str 1 1)
str (strcat
(substr str 2 (strlen str))
(
strcase s (= s (strcase s))))))
str)
;nenhuma das opções:
(t str)))


Para usar:
(strcase2 “abc def ghi” t) ou (strcase2 “abc def ghi” “minus”) -> “abc def ghi”
(strcase2 “abc def ghi” nil) ou (strcase2 “abc def ghi” “maius”) -> “ABC DEF GHI”
(strcase2 “abc def ghi” “prma”) -> “Abc def ghi”
(strcase2 “abc def ghi” “plsm”) -> “Abc Def Ghi”
(strcase2 “aBc dEf gHi” “invr”) -> “AbC DeF GhI”
assim ficou mais completo… depois eu coloco uma rotina completa usando isso

Deixe um comentário

Carrinho de compras
Rolar para cima