Match dont work

Match dont work

Leonardo_Czuy
Advocate Advocate
340 Views
2 Replies
Message 1 of 3

Match dont work

Leonardo_Czuy
Advocate
Advocate

Hello for everyone.

I'm trying to check if a block ends with _v* (Line 8), which could be _v1, _v2, _v3, and so on, but I'm having trouble. It's not able to find _v and go to the bottom part of the command.

I dont know if is match is wrong or what.

(defun c:atualizar-nome-bloco (/ a oldname newname version)
  (setq a (tblnext "block" t)) ; Encontra o primeiro bloco na tabela de blocos

  (while a
    (setq oldname (cdr (assoc 2 a))) ; Obtém o nome do bloco

    ;; Verifica se o nome do bloco já possui a versão
    (if (not (wcmatch (strcase oldname) "*_v[0-9]*"))
        (progn
          ;; Adiciona a versão inicial "_v1" ao nome do bloco
          (setq newname (strcat oldname "_v1"))
        )
        ;; Se o nome do bloco já possuir uma versão, incrementa a versão existente
        (progn
          (setq version_start (+ 2 (vl-string-search "_v" oldname))) ; Encontra o início da versão
          (setq version (atoi (substr oldname version_start))) ; Extrai a versão existente
          (setq version (1+ version)) ; Incrementa a versão
          (setq base_name (substr oldname 1 (- version_start 2))) ; Extrai o nome base sem a versão
          (setq newname (strcat base_name "_v" (itoa version))) ; Constrói o novo nome com a versão incrementada
        )
    )
    
    (princ newname)
    
    ;; Verifica se o novo nome já existe ou não
    ; (cond ((or (null newname) (= oldname newname)))
    ;   ((tblsearch "block" newname))
    ;   (t (command ".RENAME" "B" oldname newname))
    ; )

    (setq a (tblnext "block")) ; Encontra o próximo bloco na tabela de blocos
  )
  (princ)
)

 

0 Likes
Accepted solutions (2)
341 Views
2 Replies
Replies (2)
Message 2 of 3

paullimapa
Mentor
Mentor
Accepted solution

since your code does this:

(strcase oldname)

This converts the block name to all upper case.

But you're trying to match with lowercase v:

"*_v[0-9]*"

Then the code will never find a match

 


Paul Li
IT Specialist
@The Office
Apps & Publications | Video Demos
Message 3 of 3

komondormrex
Mentor
Mentor
Accepted solution

hey there, 

it needs to be capital 'V' in wcmatch expression on the line 8...