Sustraer valor de una lista y después sustituirlo
2 participantes
Página 1 de 1.
Sustraer valor de una lista y después sustituirlo
Hola como están, aquí con una nueva duda.
Tengo esta lista guardada en una variable.
Como puedo sustraer el valor de Panel ID, en este caso seria 3 (Puede ser numero entero o real) para tenerlo en una variable que necesito.
En el siguiente caso tengo la misma lista anterior pero necesito sustituir el valor del Panel ID por cualquiera que yo necesite.
En ambos casos la ubicación de Panel ID puede variar en la lista, puede estar de primero o de ultimo, es decir en cualquier lado de la lista.
La lista puede ser mas larga o mas corta, pero va a llevar la misma estructura.
Gracias y espero puedan ayudarme.
Saludos.
Tengo esta lista guardada en una variable.
- Código:
(setq lista '((-3 ("HOME" (1000 . "* = Plate Edge") (1000 . "Panel ID = 3") (1000 . "Poly ref = 19")))))
Como puedo sustraer el valor de Panel ID, en este caso seria 3 (Puede ser numero entero o real) para tenerlo en una variable que necesito.
En el siguiente caso tengo la misma lista anterior pero necesito sustituir el valor del Panel ID por cualquiera que yo necesite.
- Código:
;; Nuevo valor id
(setq new-id 1.1) ; Puede estar en texto o numero eso no seria problema
;; Lista donde lo voy a sustituir
(setq sust-lista '((-3 ("HOME" (1000 . "* = Plate Edge") (1000 . "Panel ID = 3") (1000 . "Poly ref = 19")))))
;; Resultado final
(setq lista-final '((-3 ("HOME" (1000 . "* = Plate Edge") (1000 . "Panel ID = 1.1") (1000 . "Poly ref = 19")))))
En ambos casos la ubicación de Panel ID puede variar en la lista, puede estar de primero o de ultimo, es decir en cualquier lado de la lista.
La lista puede ser mas larga o mas corta, pero va a llevar la misma estructura.
Gracias y espero puedan ayudarme.
Saludos.
carlosmgilp- Mensajes : 149
Fecha de inscripción : 17/03/2016
Edad : 42
Localización : Venezuela
Re: Sustraer valor de una lista y después sustituirlo
Por ejemplo con este lisp
Un saludo
- Código:
(defun newlP ( valor lista)
(list(cons -3(list
(mapcar '(lambda(a)
(if (and (listp a) (= (substr(cdr a) 1 5)"Panel"))
(cons 1000 (strcat "Panel ID = " (rtos valor)))
a
))
(cadar lista)))))
)
- Código:
(setq l (newlp 2.2 lista))
((-3 ("HOME" (1000 . "* = Plate Edge") (1000 . "Panel ID = 2.2") (1000 . "Poly ref = 19"))))
Un saludo
nolo- Mensajes : 182
Fecha de inscripción : 17/03/2016
Re: Sustraer valor de una lista y después sustituirlo
Desde siempre agradecido contigo hermano y con todos en el foro.
No se si soy yo, pero desde que aprendí lo poco que se de lisp y visual lisp, solo le huyo al lambda, esa si que no me la aprendo ni inyectado, es como que no se como armar esas funciones y siempre muchas cosas de las que pregunto me las resuelven con eso.
Una vez mas funciono muy bien, solo sustituí de la función el rtos por vl-princ-to-string (No se si haya otro mas fácil para pasar a texto) para que no me alterara con decimales pues necesito el texto muy exacto, de resto todo perfecto, yo creo que un 8 de 10. Jejejejejejejejeje.
Ese era el segundo caso, de la cual el primer caso no comentaste nada, que era sustraer el valor del id
Tomando la función original que me hiciste para la sustitución del valor, la modifique un poco para que me funcionara en el caso de extraer el valor.
Aquí la adjunto para que me des tu opinion, si si vale la pena, si hay algo mas fácil y sin tanto texto o si se deja así.
Mil gracias por tu ayuda y tu buena voluntad.
Saludos.
No se si soy yo, pero desde que aprendí lo poco que se de lisp y visual lisp, solo le huyo al lambda, esa si que no me la aprendo ni inyectado, es como que no se como armar esas funciones y siempre muchas cosas de las que pregunto me las resuelven con eso.
Una vez mas funciono muy bien, solo sustituí de la función el rtos por vl-princ-to-string (No se si haya otro mas fácil para pasar a texto) para que no me alterara con decimales pues necesito el texto muy exacto, de resto todo perfecto, yo creo que un 8 de 10. Jejejejejejejejeje.
Ese era el segundo caso, de la cual el primer caso no comentaste nada, que era sustraer el valor del id
Tomando la función original que me hiciste para la sustitución del valor, la modifique un poco para que me funcionara en el caso de extraer el valor.
Aquí la adjunto para que me des tu opinion, si si vale la pena, si hay algo mas fácil y sin tanto texto o si se deja así.
- Código:
(setq lista '((-3 ("HOME" (1000 . "* = Plate Edge") (1000 . "Panel ID = 1.1") (1000 . "Poly ref = 19")))))
(setq valor-id (sub-valor-id lista))
(defun sub-valor-id (lista / a)
(read (car (vl-remove nil
(mapcar '(lambda (a)
(if (and (listp a) (= (substr (cdr a) 1 5) "Panel"))
(substr (cdr a) 12)))
(cadar lista))))))
Mil gracias por tu ayuda y tu buena voluntad.
Saludos.
carlosmgilp- Mensajes : 149
Fecha de inscripción : 17/03/2016
Edad : 42
Localización : Venezuela
Re: Sustraer valor de una lista y después sustituirlo
Bueno, el control sobre los decimales del rtos lo tiene la variable dimzin
Otra forma mas genérica de hacer lo que buscas sería esta
Un saludo
Otra forma mas genérica de hacer lo que buscas sería esta
- Código:
(defun valP ( name lista / p )
(if (setq p (vl-remove-if-not '(lambda(a)
(and (listp a) (wcmatch (cdr a) (strcat name"*"))))
(cadar lista)
))
(substr (cdar p) (+(vl-string-position 61 (cdar p)) 2))
)
)
- Código:
(setq r (valp "Panel" lista))
" 3"
Un saludo
nolo- Mensajes : 182
Fecha de inscripción : 17/03/2016
Re: Sustraer valor de una lista y después sustituirlo
Hola hermano como estas.
Muchas gracias por la información, sigo aprendiendo.
Un saludo.
Muchas gracias por la información, sigo aprendiendo.
Un saludo.
carlosmgilp- Mensajes : 149
Fecha de inscripción : 17/03/2016
Edad : 42
Localización : Venezuela
Temas similares
» Sustraer y crear lista
» Valor por default en DCL
» Transponer una lista
» Elemento lista
» Ordenar lista
» Valor por default en DCL
» Transponer una lista
» Elemento lista
» Ordenar lista
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|