FoxPro/Visual FoxPro - Separa mi nombre

 
Vista:

Separa mi nombre

Publicado por Benjamin ventura (1 intervención) el 04/04/2008 05:50:15
Que tal. Con una molestia tengo una tabla con un campo llamado nombre pero resulta que ahi tengo apellido paterno, materno y nombres. He creado 3 campos llamados paterno, materno y nombres respectivamente, alguien me puede decir como separar mi campo y a su vez llenar los nuevos campos.

Pongo un ejemplo de como tengo mis datos:

Nombre: LUIS ANGEL GOMEZ TALAVERA

y necesito quede de esta manera

Paterno: GOMEZ Materno: TALAVERA Nombres: LUIS ANGEL

Gracias por la ayuda que se me pueda ofrecer!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Separa mi nombre

Publicado por Ricardo (153 intervenciones) el 04/04/2008 09:46:59
LOCAL lcNombre_completo, len_nombre, lnBlancos, lnInd, lcNombre, lcApeMat, lcApeMat

lcNombre_completo = "LUIS ANGEL GOMEZ TALAVERA"
len_nombre = 0
lnBlancos = 0
lnInd = 0
lcNombre = ""
lcApeMat = ""
lcApeMat = ""
DIMENSION arrBlancos (10)

* POner la tabla en uso
* USE tabla_entrada in 0

* seleccionarla

* recorrer
* GO TOP in tabla_Entrada

* SCAN

lcNombre_completo = "LUIS ANGEL GOMEZ TALAVERA"

* Cuneto los blancos que hay enele nombre
FOR lnInd = 1 TO LEN(ALLTRIM(lcNombre_completo))
IF SUBSTR(ALLTRIM(lcNombre_completo),lnInd,1) = " "
lnBlancos = lnBlancos + 1
arrBlancos (lnBlancos) = lnInd
ENDIF

NEXT

*Si hay blancos es que tengo al menos un apellidp
IF lnBlancos > 1
DO CASE
* solo tienes dos datos Nombre y primer apellido
CASE lnBlancos < 2

lcNombre = SUBSTR(ALLTRIM(lcNombre_completo), 1, arrBlancos(1))
lcApeMat = SUBSTR(ALLTRIM(lcNombre_completo), arrBlancos(1) + 1)

* Nombre y 2 apellidos
CASE lnBlancos = 2

lcNombre = SUBSTR(ALLTRIM(lcNombre_completo), 1, arrBlancos(1))
lcApeMat = SUBSTR(ALLTRIM(lcNombre_completo), arrBlancos(1)+ 1, arrBlancos(2))
lcApeMat = SUBSTR(ALLTRIM(lcNombre_completo), arrBlancos(2) + 1)

* Nombre compuesto y dos apellidos
CASE lnBlancos > 2

lcNombre = SUBSTR(ALLTRIM(lcNombre_completo), 1, arrBlancos(2))
lcApeMat = SUBSTR(ALLTRIM(lcNombre_completo), arrBlancos(2)+ 1, arrBlancos(3) - arrBlancos(2))
lcApePat = SUBSTR(ALLTRIM(lcNombre_completo), arrBlancos(3) + 1)

* Si hay mas es mas lio lo que yo haria sería imaginar nombre compuesto primer apellido
* hasta el blanco y el resto en el segundo apellido, de esa forma sabria que los registros
* con blanscos en el segundo apellido, hay que revisarlos a mano
ENDCASE

* Si no hay blancos lo pongo en el nombre y luego lo arreglaria
ELSE
lcNombre = ALLTRIM(lcNombre_completo)
ENDIF

*.....
* cargar la tabla_Salida
* REPLACE tabla_salida.Nombre WITH lcNombre
* REPLACE tabla_salida.Nombre WITH lcApeMat
* REPLACE tabla_salida.Nombre WITH lcApePat
*.....

*Seleccionar la tabla de entrada
* select tabla_Entrada

*ENDSCAN

* CERCAR LAS TABLAS
* USE IN tabla_Entrada
* USE IN tabla_Salida
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Separa mi nombre

Publicado por israel (2 intervenciones) el 13/06/2008 01:02:26
alguien me puede ayudar con 5 programas co n do case es que soy novato en esto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Separa mi nombre

Publicado por jorge (423 intervenciones) el 04/04/2008 19:00:41
Hola
Tienes que considerar algunas variables al respecto:
por ejemplo el formato que estan capturados, ( Paterno materno nombres)(Nombres paterno materno), o si tienen un solo nombre o dos o hasta 3...
la verdad que si se puede hacer algo, asi como te lo sugiere Ricardo, tambien puedes utilizar comandos como ATC o AT y otros .. en fin hay diferentes formas de hacerlo...pero siempre y cuando los nombres estuviesen estandarizados en su captura para que de esta forma no tuvieses problemas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Separa mi nombre

Publicado por Luighi (105 intervenciones) el 05/04/2008 04:56:44
una vez aladino le dijo al genio
quiero un deseo
y el genio respondió:
depende

centrándonos en lo que necesitas y sabiendo que todo el mundo tiene dos nombres, un apellido paterno y un apellido materno
entonces lo que necesitas está resuelto

pero la realidad es otra
hay personas que tienen sólamente un nombre, otras tienen dos nombres, otras tienen tres nombres y aunque no lo creas algunas otras tienen hasta cuatro, así como también hay personas con dos apellidos paternos y también personas con dos apellidos maternos, e inexplicablemente personas que no tienen apellido materno
te dirás pero qué exagerado es este tipo!
bueno, quizás, pero cuando empiezas a programar tienes que pensar en todas las posibilidades "posibles", y porqué?, porque la computadora no piensa, el que debe pensar eres tú

pero definamos el universo para entendernos mejor
trataremos sólamente con las personas que tienen dos nombres, un apellido paterno y un apellido materno
es así que llega Luis Angel Gómez Talavera para ayudarnos

resulta que tienes una tabla
con un campo "nombre" que contiene el dato: Luis Angel Gómez Talavera
y que también tienes tres campos adicionales: paterno, materno y nombres
y lo que deseas es que en paterno vaya: Gómez; en materno: Talavera y en nombres: Luis Angel

muy bien
entonces sólo crea un prg y escribe el siguiente código para posteriormente ejecutarlo:

**********
SELECT tabla && se supone que la tabla está abierta, sino ábrela
DIMENSION cDatos[4] && creamos una matriz con 4 elementos para usar
cDatos="" && no parece pero ésto importante

SCAN && lo haremos para todos los registros, ok?

x=1 && ésto también ayuda mucho
cNombre=nombre && aquí tenemos los dos nombres y apellidos

FOR i=1 TO 4
cNombre=LTRIM(SUBSTR(cNombre,x))
x=AT(CHR(32),cNombre) && AT() busca un texto dentro de otro devolviendo la posición numérica
IF x#0 && si x es cero entonces ya no hay nada qué buscar
cDatos[i]=LEFT(cNombre,x-1)
ELSE
EXIT && entonces terminamos con éste registro
ENDIF
ENDFOR

REPLACE nombres WITH cDatos[1]+CHR(32)+cDatos[2], ;
paterno WITH cDatos[3], materno WITH cDatos[4] && campos actualizados

ENDSCAN && y sigamos con el siguiente registro
**********

analiza con detenimiento aquél código, paso a paso, y podrás darte cuenta que es demasiado sencillo y repertir conmigo al final

más fácil imposible
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Separa mi nombre

Publicado por benjamin ventura (1 intervención) el 05/04/2008 09:26:04
Gracias por responder y repito al final: Mas facil imposibe.

salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Separa mi nombre

Publicado por Rover (1 intervención) el 01/10/2013 06:56:11
Excelente programita Luighi, pero me gustaria saber como programarias si el caso fuera como lo mencionas arriba en tu primer comentario...

"pero la realidad es otra hay personas que tienen solamente un nombre, otras tienen dos nombres, otras tienen tres nombres y aunque no lo creas algunas otras tienen hasta cuatro, así como también hay personas con dos apellidos paternos y también personas con dos apellidos maternos, e inexplicablemente personas que no tienen apellido materno"

Déjame entender la lógica de tu programita lo utilice para un caso similar que el de benjamín pero resulta que en los casos en los que hay mas de un nombre o es un apellido compuesto me repite los datos hasta en los siguientes registros ejemplo (abajo), ademas tuve que modificar lo parámetros de remplazo ya que en mi base el campo nombre es (paterno, materno y nombres(s)) -resuelto-

campo nombre = ZAMUDIO MERINO CRISTINA SOCO
** lo dejo de la siguiente manera:
campos: paterno = zamudio, materno = merino, nombres= cristina soco

**siguientes registros...

campo nombre = ZAVALA PALOMARES GERARDO

campos = paterno = zavala, materno = palomares, nombres = gerardo soco

campo nombre = ZAVALA REYES VIRGINIA

campos = paterno = zavala, materno = reyes, nombres = virginia soco

como puedes observar repite el segundo nombre del registro con dos nombres en los siguientes registros y lo mismo con los que tienen un apellido compuesto ejemplo: DE LOS SANTOS

Te agradecería muchísimo me ayudaras a entender este problemita que por tu experiencia resuelves en segundos..

Saludos y gracias por compartir tu saber.

PD. No omito mencionar que soy novato en el tema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar