Separar nombres-apellidos en 2 campos nuevos

2,162 views
Skip to first unread message

WarpaRuna

unread,
Sep 14, 2012, 4:58:54 PM9/14/12
to publice...@googlegroups.com
Hola amigos:
Necesito hacer algo: Tengo una tabla en excel que lo he pasado a dbf, donde los nombres y apellidos, estan en un solo campo.
Necesito separar los nombres y los apellidos, colocarlos cada uno en un campo separado: NOMBRES, APELLIDOS
Usando at() podria partir en dos el campo de tal forma que me quede a la izquierda nombres y apellidos hacia la derecha, a partir del caracter ' ', vacío;
Pero es el caso que en muchos de la lista hay dos nombres, en otros hay un nombre. Pero los apellidos sí, son siempre dos al final.
Entonces como haria, para buscar desde el final de un campo para atras, los dos espacios:
Vale decir tengo: nombre1 nombre2 apellidopaterno apellidomaterno.
¿Como ubico el espacio 2 entre nombre2 y apellidopaterno, contando desde el final de apellidomaterno?. Digo esto porque considero que de esta forma me aseguro de meter los dos apellidos en el campo apellidos, y lo que sobre hacia la izquierda sea que haya uno o dos nombres en el campo nombres.
No sé si me explique bien,
Desde ya, les agradezco vuestro apoyo, 

J. Enrique Ramos Menchaca

unread,
Sep 14, 2012, 5:17:16 PM9/14/12
to publice...@googlegroups.com
Yo he estado trabajando en una rutina que te separa los nombres en apellidos y nombres, tiene sus detalles, pero si gustas revisarlo lo adjunto, no esta totalmente terminado pero funciona bastante bien.
APELLIDOS.rar

Luis Maria Guayan

unread,
Sep 14, 2012, 5:14:16 PM9/14/12
to publice...@googlegroups.com
Utiliza RAT()

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

--
 
 
 

José Medina

unread,
Sep 14, 2012, 5:28:36 PM9/14/12
to publice...@googlegroups.com
WarpaRuna:
Mira, con este código puedes separar nombres y apellidos de un campo, ya sea q tengas 1 nombre o 2 nombres, si te ayuda perfecto.
Saludos.



cCade = "JOSE LUIS MEDINA JIMENEZ"

nPal = ALINES(aPal,cCade,5,SPACE(1))
cNom = IIF(ALEN(aPal)=3, aPal(1),aPal(1) + " " + aPal(2))                        && JOSE LUIS ó JOSE si el campo sólo tiene un nombre (3 palabras)
cApe = IIF(ALEN(aPal)=3, aPal(2)+ " " + aPal(3),aPal(3) + " " + aPal(4))    && MEDINA JIMENEZ
MESSAGEBOX(cNom + CHR(13) + cApe)



Walter R. Ojeda Valiente

unread,
Sep 14, 2012, 5:32:55 PM9/14/12
to publice...@googlegroups.com
Para conocer cuantas palabras hay en total puedes usar el tercer parámetro de las funciones AT() o RAT() hasta que te devuelvan cero.

lcTexto = "Walter R. Ojeda Valiente"
lnPosicion1 = AT(" ", lcTexto, 1)
lnPosicion2 = AT(" ", lcTexto, 2)
lnPosicion3 = AT(" ", lcTexto, 3)
lnPosicion4 = AT(" ", lcTexto, 4)

Una vez que sabes cuantas palabras hay, extraer las dos últimas es muy fácil. Con el texto del ejemplo:
lcApelld = SubStr(lcTexto, lnPosicion2 + 1)
lcNombre = Left(lcTexto, lnPosicion2 - 1)
? lcApelld + ", " + lcNombre

Saludos.

Walter.




Date: Fri, 14 Sep 2012 13:58:54 -0700
From: warp...@gmail.com
To: publice...@googlegroups.com
Subject: [vfp] Separar nombres-apellidos en 2 campos nuevos
--
 
 
 

Víctor Hugo Espínola Domínguez

unread,
Sep 14, 2012, 5:46:07 PM9/14/12
to publice...@googlegroups.com
Hola warparuna

Si en todos los casos hay 2 apellidos funcionará perfecto, si no estás fregado

lcNomApe  = "Víctor Hugo TresNombres Espínola Domínguez"
lnPosApe   = RAT( SPACE( 1 ), lcNomApe, 2 ) + 1
lcApe        = SUBSTR( lcNomApe, lnPosApe )
lcNom       = LEFT( lcNomApe, lnPosApe - 2 )
? lcApe + ", " + lcNom

Saludos.
Víctor.


--
 
 
 

Víctor Hugo Espínola Domínguez

unread,
Sep 14, 2012, 5:58:52 PM9/14/12
to publice...@googlegroups.com
Hay otro detalle que debes tener en cuenta: Puede haber más de un espacio entre las palabras.
En portalfox hay una función para eliminar los espacios dobles.

Saludos.
Víctor.

Luis Mata

unread,
Sep 14, 2012, 6:00:06 PM9/14/12
to publice...@googlegroups.com
Apellidos compuestos
 


logo2 Mata Figueroa, Luis A.
Procesos y Tecnología
TELF: (00 51 1) 617-4667
RPC : (00 51) 993597297
lm...@cclf.com.pe
www.cclf.com.pe
imgfrm

--
 
 
 
logo2[3].png
imgfrm[3].png

Luis Maria Guayan

unread,
Sep 14, 2012, 6:13:20 PM9/14/12
to publice...@googlegroups.com
Dos opciones para contar palabras con el delimitador " "

1)

lcTexto = "Walter R. Ojeda Valiente"
lnCuantas = GETWORDCOUNT(lcTexto, " ")
FOR lnI = lnCuantas TO 1 STEP -1
  ? GETWORDNUM(lcTexto,lnI, " ")
ENDFOR

2)

lcTexto = "Walter R. Ojeda Valiente"
lnCuantas = ALINES(la, lcTexto, 1+4, " ")
FOR lnI = lnCuantas TO 1 STEP -1
  ? la(lnI)
ENDFOR




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

--
 
 
 

Víctor Hugo Espínola Domínguez

unread,
Sep 14, 2012, 6:29:20 PM9/14/12
to publice...@googlegroups.com
Muy acertada tu acotación Luís.

La solución ideal es hacer un programa que le permita al usuario ubicar "," (coma) donde termina(n) el(los) nombre(s). De paso puede corregir los errores ortográficos que de seguro existirán.

Saludos.
Víctor.


--
 
 
 

logo2[3].png
imgfrm[3].png

Víctor Hugo Espínola Domínguez

unread,
Sep 14, 2012, 7:23:52 PM9/14/12
to publice...@googlegroups.com
Hola WarpaRuna

Adjunto formulario de ejemplo que te permite poner ";" (punto y coma) en la posición en que hagas click con el mouse.

Saludos.
Víctor.


El 14 de septiembre de 2012 16:58, WarpaRuna <warp...@gmail.com> escribió:

--
 
 
 

NomApe._rar

J. Enrique Ramos Menchaca

unread,
Sep 14, 2012, 11:43:09 PM9/14/12
to publice...@googlegroups.com
Por el problema que resultan los apellidos compuestos fue que utilizó la tabla de apellidos en castellano para poder resolverlos más fácilmente, actualmente ya la estoy utilizando en sistemas en funcionamiento, sin mayores contratiempos, claro que con él tiempo se han ido agregando más y más apellidos locales de donde se utilizan los sistemas.


El viernes, 14 de septiembre de 2012 15:58:54 UTC-5, WarpaRuna escribió:

Carlos Miguel FARIAS

unread,
Sep 15, 2012, 11:17:43 AM9/15/12
to publice...@googlegroups.com
La forma de separar mejor un texto es con alines(), pasas todo a un
array y luego se revisa cada texto.
Se debe contar con una lista de nombres (me parece más fácil de
obtener) o una de apellidos (o ambas, es solo trabajo de cargarla una
vez).
Esa lista debe tener además una marca para indicar si un nombre puede
ser nombre o apellido (por ejemplo Martín, Jorge, etc.).
Como los datos están en un array, la revisión pasa por un simple
bucle, y como el array me da a su vez posicionamiento relativo de cada
nombre/apellido, por su ubicación puedo discernir si es apellido o
nombre.
Para detectar los errores de tipeo, podes usar soundex si el apellido
no lo encontraste directamente en la lista, para encontrar algo
parecido (aunque el soundex no es muy preciso).
Saludos: Miguel, La Pampa (RA)


El día 15 de septiembre de 2012 00:43, J. Enrique Ramos Menchaca
<jera...@gmail.com> escribió:
> --
>
>
>

Víctor Hugo Espínola Domínguez

unread,
Sep 15, 2012, 12:40:26 PM9/15/12
to publice...@googlegroups.com
Hola

Sin ánimo de polemizar, la tarea de cargar nombres y apellidos en una tabla es más engorrosa que mirar los datos actuales y hacer click donde corresponda.

Saludos.
Víctor.


--




WarpaRuna

unread,
Sep 15, 2012, 2:25:50 PM9/15/12
to publice...@googlegroups.com
A todos los amigos del Grupo:
J. Enrique, Luis MAria,  José, Walter, Miguel, Victor Hugo .....
¡¡¡Que maravilla de buenos profesores sois, todos!!!
Gracias por ese gesto maravilloso que tienen todos ustedes: La enseñanza. 
Me han dado varias alternativas, y la verdad, sigo aprendiendo de ustedes.
Gracias a todos, por sus aportes ... me han llenado de nuevos conocimientos.

Nuestro zorro realmente es super potente. Para lo que yo hago, me basta y me sobra. No lo sé usar ni en un 30% de su potencial me parece.
El grupo de Visual Foxpro, siempre me pareció el más solidario y que comparten sus conocimientos.


El viernes, 14 de septiembre de 2012 15:58:54 UTC-5, WarpaRuna escribió:
Reply all
Reply to author
Forward
0 new messages