Cadena separada por comas a cursor

1,578 views
Skip to first unread message

Arturo Ramos

unread,
Jun 7, 2011, 10:39:21 PM6/7/11
to publice...@googlegroups.com
Hola foro,

Tengo en una tabla un campo que tiene una lista de elementos separados por comas por ejemplo:
hormigas,cucaracas,ratones    o
ratones,hormigas

lo que quiero es pasar esta lista a un cursor
curPlagas
--------------
hormigas
cucarachas
ratones

Sugerencias ??

Gracias, Saludos.

Arturo Ramos
www.ircsasoftware.com.mx
Cancún, México.

Walter R. Ojeda Valiente

unread,
Jun 7, 2011, 11:30:00 PM6/7/11
to publice...@googlegroups.com
Lo más sencillo es que utilices una función PARSER()

¿Qué es una función parser? Una que te permite separar todos los elementos que recibe en su parámetro de tipo caracter. A la función parser tienes que enviarle dos parámetros:
- El texto que contiene todos los elementos. Se debe enviar por referencia.
- El caracter (o caracteres) que separa a un elemento del siguiente.

lcTexto = "hormigas, cucarachas, ratones"
lcSeparador = ","

do while !Empty(lcTexto)
  lcAnimal = Parser(@lcTexto, lcSeparador)
  ? AllTrim(lcAnimal)
enddo
*
*
Function PARSER
Parameters tcTexto, tcDivisor
Local lnPosicion, lcValor
 
  lnPosicion = At(tcDivisor, tcTexto)
 
  if lnPosicion > 0
    lcValor = Left(tcTexto, lnPosicion - 1)
    tcTexto = SubStr(tcTexto, lnPosicion + 1)
  else
    lcValor = tcTexto
    tcTexto = ""
  endif
 
Return(lcValor)
*
*

Una función parser es súper útil, se puede usar para enviar en un solo parámetro lo que en otro caso requeriría de un montón de parámetros. O para muchas cosas más.

Saludos.

Walter.




Date: Tue, 7 Jun 2011 19:39:21 -0700
From: irc...@gmail.com
To: publice...@googlegroups.com
Subject: [vfp] Cadena separada por comas a cursor

Luis Mata

unread,
Jun 7, 2011, 11:32:36 PM6/7/11
to publice...@googlegroups.com
mtexto = 'Hormigas,Cucarachas, Grillos,   Perros'
CREATE CURSOR tempo(nombre v(200))
vi = 1
va = 0
FOR i=1 TO LEN(mtexto)
    IF SUBSTR(mtexto,i,1)=','       
        va = i-1
        valor =  ALLTRIM(SUBSTR(mtexto,vi,(va-vi)))
        vi = va+2
        INSERT INTO tempo values(valor)
    endif
NEXT 1
valor =  ALLTRIM(SUBSTR(mtexto,vi,30))
INSERT INTO tempo values(valor)
SELECT tempo
browse

Arturo Ramos

unread,
Jun 8, 2011, 12:02:15 AM6/8/11
to publice...@googlegroups.com
Gracias Walter,

ideal ya que en el mismo recorrido tengo que sacar el lugar dónde se presenta la plaga: cocina,baño,patio
esta cadena esta en otro campo del mismo registro de la misma tabla.

Arturo Ramos

unread,
Jun 8, 2011, 12:04:26 AM6/8/11
to publice...@googlegroups.com
Gracias Luis,  funcional, gracias por tu tiempo.

Luis Maria Guayan

unread,
Jun 8, 2011, 8:59:32 AM6/8/11
to publice...@googlegroups.com
Con ALINES() lo tienes en un vector, allí lo puedes recorrer e insertar donde quieras:

lc = "hormigas,cucaracas,ratones"
FOR ln=1 TO ALINES(la, lc,5,",")
? la(ln)
ENDFOR

Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Antonio Meza

unread,
Jun 8, 2011, 3:14:55 PM6/8/11
to publice...@googlegroups.com
Excelente ejemplo Sr. Luis Maria!!!
 
Me ayudo a mejorar mi clase de barra de botones, ahora con unas simples lineas usando su ejemplo!!
 
 
saludos
Antonio Meza

Arturo Ramos

unread,
Jun 8, 2011, 5:12:03 PM6/8/11
to publice...@googlegroups.com
Essssa es la función... sabía que había visto algo así alguna vez... gracias 'maestro'.
Reply all
Reply to author
Forward
0 new messages