Convertir cadena a lista de puntos
4 participantes
Página 1 de 1.
Convertir cadena a lista de puntos
Hola. Tengo una cadena de texto formada por decenas de puntos, con su respectiva X e Y. Necesito pasar esa cadena de texto a una lista de puntos.
Ejemplo:
cadena "125.364 796.146 108.456 883.004 108.990 903.008......."
Lista resultante ((125.364 796.146)(108.456 883.004)(108.990 903.008)....)
Alguna idea para hacerlo de forma lo más automatizada posible???? Graciassss
Ejemplo:
cadena "125.364 796.146 108.456 883.004 108.990 903.008......."
Lista resultante ((125.364 796.146)(108.456 883.004)(108.990 903.008)....)
Alguna idea para hacerlo de forma lo más automatizada posible???? Graciassss
separa cadena y agrupar de a dos
No encuentro el modo de insertar como CODE , agradezco a quien pueda informarme
;******************************************************************************************
;;;(str-divset "Text mit\nZeilenumbruch" " \n")
;;;;;-*******************************************************************************************************************************
;;;;;-*******************************************************************************************************************************
;;Copyright :copyright: http://autolisp.mapcar.net/strtok.html
(DEFUN STR-DIV (STR C / I L) ;_01
(SETQ I 1)
(SETQ L (STRLEN STR))
(WHILE (AND (<= I L) (/= (SUBSTR STR I 1) C))
(SETQ I (1+ I))
)
(LIST (SUBSTR STR 1 (1- I)) (SUBSTR STR (1+ I)))
)
;;;
;;;(str-div "Schraube;M12;1,5;36;367.4;252.6;0.0" ";")
;;;("Schraube" "M12;1,5;36;367.4;252.6;0.0")
;;;(str-div "1,234,567.89" ",")
;;;("M12" "1,5;36;367.4;252.6;0.0")
;;;;;-*******************************************************************************************************************************
;;separa por un separador
(DEFUN STR-TOK (STR C / TMP) ;_01
(IF (/= STR "")
(PROGN
(SETQ TMP (STR-DIV STR C))
(APPEND (LIST (CAR TMP)) (STR-TOK (CADR TMP) C))
)
)
)
;;;"M12,1.5,36,367.4,252.6,0.0" )
;;;(str-tok "Schraube;M12;1,5;36;367.4;252.6;0.0" ";")
;;;
;;;("Schraube" "M12" "1,5" "36" "367.4" "252.6" "0.0")
;;;
;;;;;-*******************************************************************************************************************************
;;************************************************************************************************************
;;*//*/*/*/*/*/*/*/*/*/*/*/*/**/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
(DEFUN GROUP-BY-NUM (LST NUM / LS RET)
(SETQ RET NIL)
(IF (= (REM (LENGTH LST) NUM) 0)
(PROGN
(SETQ LS NIL)
(REPEAT (/ (LENGTH LST) NUM)
(REPEAT NUM
(SETQ LS
(CONS (CAR LST) LS)
LST (CDR LST)))
(SETQ RET
(APPEND RET (LIST (REVERSE LS)))
LS NIL)))
)
RET
)
;;-*******************************************************************************************************************************
(setq Cadena "125.364 796.146 108.456 883.004 108.990 903.008")
(setq cadena-separada (str-tok cadena " "))
(setq puntos-cadena (GROUP-BY-NUM cadena-separada 2))
;******************************************************************************************
;;;(str-divset "Text mit\nZeilenumbruch" " \n")
;;;;;-*******************************************************************************************************************************
;;;;;-*******************************************************************************************************************************
;;Copyright :copyright: http://autolisp.mapcar.net/strtok.html
(DEFUN STR-DIV (STR C / I L) ;_01
(SETQ I 1)
(SETQ L (STRLEN STR))
(WHILE (AND (<= I L) (/= (SUBSTR STR I 1) C))
(SETQ I (1+ I))
)
(LIST (SUBSTR STR 1 (1- I)) (SUBSTR STR (1+ I)))
)
;;;
;;;(str-div "Schraube;M12;1,5;36;367.4;252.6;0.0" ";")
;;;("Schraube" "M12;1,5;36;367.4;252.6;0.0")
;;;(str-div "1,234,567.89" ",")
;;;("M12" "1,5;36;367.4;252.6;0.0")
;;;;;-*******************************************************************************************************************************
;;separa por un separador
(DEFUN STR-TOK (STR C / TMP) ;_01
(IF (/= STR "")
(PROGN
(SETQ TMP (STR-DIV STR C))
(APPEND (LIST (CAR TMP)) (STR-TOK (CADR TMP) C))
)
)
)
;;;"M12,1.5,36,367.4,252.6,0.0" )
;;;(str-tok "Schraube;M12;1,5;36;367.4;252.6;0.0" ";")
;;;
;;;("Schraube" "M12" "1,5" "36" "367.4" "252.6" "0.0")
;;;
;;;;;-*******************************************************************************************************************************
;;************************************************************************************************************
;;*//*/*/*/*/*/*/*/*/*/*/*/*/**/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
(DEFUN GROUP-BY-NUM (LST NUM / LS RET)
(SETQ RET NIL)
(IF (= (REM (LENGTH LST) NUM) 0)
(PROGN
(SETQ LS NIL)
(REPEAT (/ (LENGTH LST) NUM)
(REPEAT NUM
(SETQ LS
(CONS (CAR LST) LS)
LST (CDR LST)))
(SETQ RET
(APPEND RET (LIST (REVERSE LS)))
LS NIL)))
)
RET
)
;;-*******************************************************************************************************************************
(setq Cadena "125.364 796.146 108.456 883.004 108.990 903.008")
(setq cadena-separada (str-tok cadena " "))
(setq puntos-cadena (GROUP-BY-NUM cadena-separada 2))
A robierzo le gusta esta publicaciòn
Re: Convertir cadena a lista de puntos
Muchas gracias por la función, Gabriel. Está perfecta. Le he añadido un distof para que me lo convierta a números y es justo lo que necesitaba.
Gracias!!!!
P.D.: el símbolo para poner como código es el décimo empezando por la izquierda (el segundo del tercer bloque)
Gracias!!!!
P.D.: el símbolo para poner como código es el décimo empezando por la izquierda (el segundo del tercer bloque)
no puedo usar el CODE
robierzo escribió:Muchas gracias por la función, Gabriel. Está perfecta. Le he añadido un distof para que me lo convierta a números y es justo lo que necesitaba.
Gracias!!!!
P.D.: el símbolo para poner como código es el décimo empezando por la izquierda (el segundo del tercer bloque)
No veo ningun símbolo en mi PC
no veo los códigos
No veo los códigosAdmin escribió:robierzo escribió:Muchas gracias por la función, Gabriel. Está perfecta. Le he añadido un distof para que me lo convierta a números y es justo lo que necesitaba.
Gracias!!!!
P.D.: el símbolo para poner como código es el décimo empezando por la izquierda (el segundo del tercer bloque)
No veo ningun símbolo en mi PC
Debe ser algo de los HTML que está desactivados
- Archivos
Re: Convertir cadena a lista de puntos
Gracias Robierzo . son todas defun que he ido "cosechando" en el extenso vergel del mundo LISP .
Las dos primeras tienen indicado el autor , la última es de mi amigo Ruso, con perdón de la palabra, FATTY , o TOH . o OLEG , lamentablemente fallecido . Quien supo ayudarme en mi desarrollo de cuasi programador LISP.
Las dos primeras tienen indicado el autor , la última es de mi amigo Ruso, con perdón de la palabra, FATTY , o TOH . o OLEG , lamentablemente fallecido . Quien supo ayudarme en mi desarrollo de cuasi programador LISP.
A robierzo le gusta esta publicaciòn
Re: Convertir cadena a lista de puntos
Perdon: habia puesto como mensaje lo mismo que ROBIERZO.devitg escribió: No encuentro el modo de insertar como CODE , agradezco a quien pueda informarme
Dominguez- Mensajes : 134
Fecha de inscripción : 20/03/2016
Edad : 73
Localización : Zaragoza (España)
no veo los códigos sigo sin ver los iconos de formateo en mi pantalla
Dominguez escribió:Perdon: habia puesto como mensaje lo mismo que ROBIERZO.devitg escribió: No encuentro el modo de insertar como CODE , agradezco a quien pueda informarme
Va prueba de quote y code "a mano "
"prueba"
- Código:
(setq estoesunapreuba (list q w e r t y))
estoy aprendiendo
Re: Convertir cadena a lista de puntos
Perfecto, asi es.
un saludo
un saludo
Dominguez- Mensajes : 134
Fecha de inscripción : 20/03/2016
Edad : 73
Localización : Zaragoza (España)
Re: Convertir cadena a lista de puntos
Hola amigos.
Les dejo un método alternativo
Aunque me encanta esto de manipular y descomponer cadenas de texto, también está el método de convertir primero la cadena a una lista con la función READ y luego trabajarla como valores que hay que agrupar, en vez de irla partiendo en pequeñas cadenas. Parece bastante más simple
Les dejo un método alternativo
Aunque me encanta esto de manipular y descomponer cadenas de texto, también está el método de convertir primero la cadena a una lista con la función READ y luego trabajarla como valores que hay que agrupar, en vez de irla partiendo en pequeñas cadenas. Parece bastante más simple
- Código:
(setq cadena "125.364 796.146 108.456 883.004 108.990 903.008")
(setq lista (read (strcat "(" cadena ")" )))
(while
(setq punto (list (car lista) (cadr lista))
puntos (cons punto puntos)
lista (cddr lista)
)
)
_$ puntos
((108.99 903.008) (108.456 883.004) (125.364 796.146))
_$
Gerardo Calvo- Mensajes : 32
Fecha de inscripción : 29/10/2019
A robierzo y a Marco Jacinto les gusta esta publicaciòn

» Convertir de Longitud-Latitud a UCS
» remover caracter en cadena de texto
» Transponer una lista
» Elemento lista
» Ordenar lista
» remover caracter en cadena de texto
» Transponer una lista
» Elemento lista
» Ordenar lista
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|