La Web del Programador: Comunidad de Programadores
 
    Pregunta:  60719 - SEPARAR NOMBRES COMPUESTOS
Autor:  abel martinez
Hola buenas tardes, necesito separar el campo nombre una base de datos DE VISUAL FOXPRO en apellido paterno, materno y nombre solo que tambien se encuentran nombres compuestos y de solo un apellido y nombre espero puedan ayudarme les dejo un ejemplo del tipo de nombres que exiten, gracias.

JARAMILLO DE LOS REYES JORGE LUIS
TORRES DE LOS ANGELES CYNTHIA NALLELY
ALVAREZ LOPEZ JULIO

  Respuesta:  ricardo soldini
mira es facil solo debes recorrer el campo nombre asignado los caracters a una variable para seprar las partes de nombre y cuando te encuentras con los espacios intermedios aplicas una funcion que evalue si lo que separaste es parte del apellido o nombre compuesto

ej suponiendo que nombre este compesto de apellido pat, materno, nombres
store spaces(30) to nombres, paterno, materno, nom_prov
posicion=1
for i = 1 to len(mombre)
if substr(nombre,i,1) != " "
nom_prov =nom_prov + substr(nombre,i,1)
else
if !compuesto(nom_prov)
do case
case posicion= 1
paterno=nom_prov
posicion=2
nom_prov=space(30)
case posicion=2
materno=nom_prov
posicion=3
nom_prov=sace(30)
OTHERWISE
NOMBRES=NOMBRES+NOM_PROV
NOM_PROV=SPACE(30)
ENDCASE
ELSE
NOM_PROV=NOM_PROV+" " && PARA QUE QUEDE EL APELLIDO
COMO ES EJ 'DEL SOLAR'
ENDIF


FUNCTION COMPUESTO(NOMB)
ES_COMP=.F.
DO CASE
CASE UPPER(ALLTRIM(NOMB))="DE"
ES_COMP=.T.
CASE UPPER(ALLTRIM(NOMB))="DEL"
ES_COMP=.T.
CASE UPPER(ALLTRIM(NOMB))="LAS"
ES_COMP=.T.
CASE UPPER(ALLTRIM(NOMB))="MC"
ES_COMP=.T.
CASE UPPER(ALLTRIM(NOMB))="O'"
ES_COMP=.T.
CASE UPPER(ALLTRIM(NOMB))="LA"
ES_COMP=.T.
CASE UPPER(ALLTRIM(NOMB))="LOS"
ES_COMP=.T.
CASE UPPER(ALLTRIM(NOMB))="LO"
ES_COMP=.T.
CASE UPPER(ALLTRIM(NOMB))="<lo que necesites"
ES_COMP=.T.
ENCASE
RETURN(ES_COMP)