remover caracter en cadena de texto
3 participantes
Página 1 de 1.
remover caracter en cadena de texto
Hola: Tengo una consulta, necesito elimianr caracteres de uno y varios textos a la vez, por ejemplo: un texto que es AREA = 525.68 m2 deseo eliminar los 3 caracteres finales que serian espacio y m2, pero asu vez tambien deseo eliminar los primeros textos que serian 7: AREA = he encontrado en un foro una rutina pero necesitaria modificarla para tambien eliminar los caracteres iniciales:
recalco que la rutina no es mia, esta tal cual se encuentra libremente.
- Código:
(defun c:Char-Rem-R ( / ent idx nol ss tmp)
(command "UNDO" "BE")
(if (setq ss (ssget "_:L" '((0 . "MTEXT,TEXT"))))
(progn
(setq nol (getint "\n Number of Characters to Remove from Front of String <1>:"))
(if (eq nol nil) (setq nol 1))
(repeat (setq idx (sslength ss))
(setq ent (entget(ssname ss (setq idx (1- idx)))))
(if (> (strlen (cdr(assoc 1 ent))) nol)
(progn
(setq ent (subst (cons 1 (substr (cdr(assoc 1 ent)) 1 (-(strlen (cdr(assoc 1 ent))) nol ))) (assoc 1 ent) ent) )
(entmod ent)
)
(setq tmp 1)
)
)
)
(princ "No Text Selected. Please Try Again")
)
(command "UNDO" "END")
(if (= tmp 1)
(princ "\nSome Selected Text Have Less Characters than Number of Characters to Remove! (No Characters removed from these)")
)
(princ)
)
recalco que la rutina no es mia, esta tal cual se encuentra libremente.
cyberactive- Mensajes : 28
Fecha de inscripción : 16/05/2016
Re: remover caracter en cadena de texto
Prueba esto
- Código:
(VL-LOAD-COM)
(setq texto "AREA = 525.68 m2")
(SETQ TEXTO-SIN-IZQ ( vl-string-left-trim "AREA = " TEXTO))
(SETQ TEXTO-SIN-DER (vl-string-right-trim " m2" TEXTO-SIN-IZQ))
Re: remover caracter en cadena de texto
Hola Admin: muchas gracias, no he podido lograr correr al combinar el lisp anterior con los cambios que propones, podrias mostrarme como seria al combinarlo, muchas gracias y disculpa la molestia.
cyberactive- Mensajes : 28
Fecha de inscripción : 16/05/2016
Re: remover caracter en cadena de texto
El tema es que tu dices que quieres obtener parte numérica de un texto
En mi planteo y dado que tu muestras un solo texto , mi rutina saca tan solo los
"AREA = " de la parte izquierda del texto "AREA = 525.68 m2"
y luego saca la parte de derecha " m2" del texto "AREA = 525.68 m2".
Si pudieras mostrar el DWG , será mas fácil ayudarte.
- Código:
"AREA = 525.68 m2")
En mi planteo y dado que tu muestras un solo texto , mi rutina saca tan solo los
"AREA = " de la parte izquierda del texto "AREA = 525.68 m2"
y luego saca la parte de derecha " m2" del texto "AREA = 525.68 m2".
Si pudieras mostrar el DWG , será mas fácil ayudarte.
Re: remover caracter en cadena de texto
Hola, cyberactive....
Acabo de modificar un poco el codigo que posteaste, y ya asi puedes eliminar los ultimos 3 caracteres, solo estoy viendo la manera de eliminar tambien los primeros 3.
aqui te dejo esta primera parte.
Saludos
Acabo de modificar un poco el codigo que posteaste, y ya asi puedes eliminar los ultimos 3 caracteres, solo estoy viendo la manera de eliminar tambien los primeros 3.
aqui te dejo esta primera parte.
- Código:
(defun c:Char-Rem-R ( / ent idx nol ss tmp)
(command "UNDO" "BE")
(if (setq ss (ssget "_:L" '((0 . "MTEXT,TEXT"))))
(progn
(if (eq nol nil) (setq nol 3))
(repeat (setq idx (sslength ss))
(setq ent (entget(ssname ss (setq idx (1- idx)))))
(if (> (strlen (cdr(assoc 1 ent))) nol)
(progn
(setq ent (subst (cons 1 (substr (cdr(assoc 1 ent)) 1 (-(strlen (cdr(assoc 1 ent))) nol ))) (assoc 1 ent) ent) )
(entmod ent)
)
(setq tmp 1)
)
)
)
(princ "Ningún texto seleccionado. Inténtalo de nuevo")
)
(command "UNDO" "END")
(if (= tmp 1)
(princ "\n¡Algunos textos seleccionados tienen menos caracteres que el número de caracteres para eliminar! (No hay caracteres eliminados de estos)")
)
(princ)
)
Saludos
saulo2016- Mensajes : 211
Fecha de inscripción : 17/03/2016
Edad : 58
Localización : Monterrey, Nuevo León, Mexico
Re: remover caracter en cadena de texto
Hola de nuevo.
Aquí pongo este código que en alguna ocación conseguí, y hace lo que necesitas exactamente.
ojalá y te sirva.
Saludos
Aquí pongo este código que en alguna ocación conseguí, y hace lo que necesitas exactamente.
ojalá y te sirva.
- Código:
; Recorta los textos a la derecha o izquierda, según lo indicado.
; Programa desarrollado por Mario Torres Pejerrey
; http://www.construcgeek.com/
;|Este es un lisp en formato original, se puede ver el código fuente, la intención, es de que el código fuente
; pueda ser modificado y adaptado a la necesidad de cada usuario, lo único que siempre se solicita en estos
; casos es de que siempre se haga referencia al autor del mismo (es decir que no se modifique la autoría del lisp),
; salvo que este se modifique ampliamente, si se construye un nuevo programa tomando como partes un lisp publicado,
; se debería de hacer el comentario de que parte del nuevo programa esta basado en el autor original.|;
; Programa descargado desde http://www.construcgeek.com/
; ConstrucGeek 2008
;Cargar las funciones ActiveX (Visual Lisp)
(vl-load-com)
(defun c:ret()
(if (null QueRecortarDef)(setq QueRecortarDef "Derecha"))
(initget "Izquierda Derecha Ambos")
(setq QueRecortar (getkword (strcat "\nIndique el lado a recortar los textos [Izquierda/Derecha/Ambos] <" QueRecortarDef ">: ")))
(if (null QueRecortar)(setq QueRecortar QueRecortarDef))(setq QueRecortarDef QueRecortar)
(cond
((= QueRecortar "Izquierda")
(RecortarIzquierda)
)
((= QueRecortar "Derecha")
(RecortarDerecha)
)
((= QueRecortar "Ambos")
(RecortarIzquierda)
(RecortarDerecha)
)
)
(princ "\nSeleccione los textos a recortar")
(setq conj (ssget '((-4 . "<OR")(0 . "TEXT")(0 . "MTEXT")(-4 . "OR>"))))
(setq nums (sslength conj))
(setq n 0)
(repeat nums
(setq entsup (ssname conj n))
(setq entvla (vlax-ename->vla-object entsup))
(setq vtextoOrigen (vla-get-TextString entvla))
(cond
((= QueRecortar "Izquierda")
(setq vTextoDestino (substr vtextoOrigen (+ nCaracteresRecortarIzquierda 1)(strlen vtextoOrigen) ))
)
((= QueRecortar "Derecha")
(setq vTextoDestino (substr vtextoOrigen 1 (- (strlen vtextoOrigen) nCaracteresRecortarDerecha)))
)
((= QueRecortar "Ambos")
(setq vTextoDestino (substr vtextoOrigen (+ nCaracteresRecortarIzquierda 1)(strlen vtextoOrigen) ))
(setq vTextoDestino (substr vTextoDestino 1 (- (strlen vTextoDestino) nCaracteresRecortarDerecha)))
)
)
(vla-put-TextString entvla vTextoDestino)
(setq n (1+ n))
)
(princ)
)
(defun RecortarIzquierda()
(if (null nCaracteresRecortarIzquierdaDef)(setq nCaracteresRecortarIzquierdaDef 0))
(setq nCaracteresRecortarIzquierda (getint (strcat "\nIngrese el número de caracteres a recortar a la izquierda <" (itoa nCaracteresRecortarIzquierdaDef) ">: ")))
(if (null nCaracteresRecortarIzquierda)(setq nCaracteresRecortarIzquierda nCaracteresRecortarIzquierdaDef))(setq nCaracteresRecortarIzquierdaDef nCaracteresRecortarIzquierda)
)
(defun RecortarDerecha()
(if (null nCaracteresRecortarDerechaDef)(setq nCaracteresRecortarDerechaDef 0))
(setq nCaracteresRecortarDerecha (getint (strcat "\nIngrese el número de caracteres a recortar a la derecha <" (itoa nCaracteresRecortarDerechaDef) ">: ")))
(if (null nCaracteresRecortarDerecha)(setq nCaracteresRecortarDerecha nCaracteresRecortarDerechaDef))(setq nCaracteresRecortarDerechaDef nCaracteresRecortarDerecha)
)
Saludos
saulo2016- Mensajes : 211
Fecha de inscripción : 17/03/2016
Edad : 58
Localización : Monterrey, Nuevo León, Mexico
Re: remover caracter en cadena de texto
Eso era lo que necesitaba, me servirá de mucho, muchas gracias.
cyberactive- Mensajes : 28
Fecha de inscripción : 16/05/2016
Temas similares
» Convertir cadena a lista de puntos
» HTML -> Texto
» Texto de Coordenada
» Datos de CAD a CSV y de CSV a texto de Acad
» Pantalla de texto estrecha
» HTML -> Texto
» Texto de Coordenada
» Datos de CAD a CSV y de CSV a texto de Acad
» Pantalla de texto estrecha
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|