Discussion:
Separar una cadena de texto
(demasiado antiguo para responder)
CarCar
2004-07-13 22:19:22 UTC
Permalink
Hola:

Teniendo en cuenta que no nos dices cómo llegan esos datos
tipo texto... va a ser dificil ayudarte.

Además y desgraciadamente los nombre pueden ser compuestos
o no y lo mismo ocurre con los apellidos, si en el texto
en el que te los han dado no hay una separación claro, lo
veo asaz complicado.

Saludos,
CarCar
MVP-Access
-----Mensaje original-----
Me pasaron una lista de nombres, sin embargo ocupo
separarlos en tres columnas, apellido materno, paterno y
nombres. Cual es la forma mas facil de hacer esto??
.
Alex
2004-07-14 02:03:02 UTC
Permalink
Ok, la lista es en una tabla de access, que solo tiene un campo que se llama nombre. El tipo de campo es text, cada nombre esta separado nadamas por un espacio, no tiene comas ni nada por el estilo. Por decir, si en un campo viene Juan Perez Gonzalez, me gustaria separar esta informacion a tres campos, una que contenga la palabra Juan, el siguiente, la palabra Perez, y el ultimo campo la Palabra Gonzalez... Si todavia no me explico diganme. Encontre como parsear, pero no lo puedo hacer que se ponga en una tabla...
Jordi
2004-07-14 10:03:07 UTC
Permalink
El problema a que se refiere CarCar es que si el nombre es
como tu dices Juan Perez XXXX, bien se puede utilizar una
funcion para detectar el espacio en blanco, pero por
ejemplo si el nombre es Juan Carlos Perez XXXX, ya no es
el primer espacio sino el segundo, me explico.
Te paso una funcion que te extrae el texto hasta el primer
espacio el resto deberas currartelo
Public Function ExtraerNombre(strNombre As String) As
String
Dim I As Integer
Dim miNombre As String
For I = 1 To Len(strNombre)
If Mid(strNombre, I, 1) = " " Then
Exit For
Else
miNombre = miNombre & Mid(strNombre, I, 1)
End If
Next I
ExtraerNombre = miNombre
I = 0
miNombre = ""
End Function
Como bien te digo solo sacara el texto hasta el primer
espacio, con este ejemplo creo que le sacaras partido
Un saludo
Skakeo®
-----Mensaje original-----
Ok, la lista es en una tabla de access, que solo tiene un
campo que se llama nombre. El tipo de campo es text, cada
nombre esta separado nadamas por un espacio, no tiene
comas ni nada por el estilo. Por decir, si en un campo
viene Juan Perez Gonzalez, me gustaria separar esta
informacion a tres campos, una que contenga la palabra
Juan, el siguiente, la palabra Perez, y el ultimo campo la
Palabra Gonzalez... Si todavia no me explico diganme.
Encontre como parsear, pero no lo puedo hacer que se ponga
en una tabla...
.
Victor Delgadillo
2004-07-14 11:10:52 UTC
Permalink
Si todos los de la lista tienen solo tres elementos (nombre, apellido1,
apellido2) entonces puedes usar la funcion InStr():

Public Sub SepararNombre(strNombre as String)
Dim sS1 as String
Dim sS2 as String
Dim sS3 as String
Dim int1 as Integer
int1 = InStr(strNombre, " ")
sS1 = Left(strNombre,int1-1)
strNombre = Mid(strNombre,int1)
int1 = InStr(strNombre, " ")
sS2 = Left(strNombre,int1-1)
strNombre = Mid(strNombre,int1)
sS3 = strNombre
' ahora tienes los tres elementos en sS1, sS2, y sS3 donde puedes
insertarlos en una tabla normal
El problema es que estas listas generalmente vienen con iniciales o segundos
nombres, etc.
Si manualmente puedes recorrer la lista y asegurarte (quitar el espacio
entre nombres compuestos: Juan Antonio Perez Martinez convertirlo en
Juan_Antonio Perez Martinez, entonces te funcionará.)
Carlos A Ramirez Mercado --> Carlos_A Ramirez Mercado

Si la lista es de miles, puedes hacer una funcion donde detectas si existen
mas de tres espacios, que el primer espacio lo convierta en 'subrayado'.
Por ejemplo:

Dim iContador as Integer
Dim iEspacios as Integer
' aqui cuentas los espacios:
Revisar_De_Nuevo:
iEspacios = 0
For iContador = 1 to Len(strNombre)
If Mid(strNombre, iContador, 1) = " " Then
iEspacios = iEspacios + 1
End If
Next
If iEspacios > 2 Then
Mid(strNombre, InStr(strNombre," "),1) = "_"
' como precaucion de haber mas de 4 espacios, sigue revisando:
Goto Revisar_De_Nuevo
End If

Esto convierte a Juan A. J. Mercado Garcia en Juan_A._J. Mercado Garcia

Analiza y ve... esto de jugar con cadenas es divertido!!
--
Victor Delgadillo [MVP Access]
Miami, Florida

Consultas al grupo, asi todos nos beneficiamos.
Vea los MVP: http://www.microsoft.com/communities/mvp/mvp.mspx
Post by Alex
Ok, la lista es en una tabla de access, que solo tiene un campo que se
llama nombre. El tipo de campo es text, cada nombre esta separado nadamas
por un espacio, no tiene comas ni nada por el estilo. Por decir, si en un
campo viene Juan Perez Gonzalez, me gustaria separar esta informacion a tres
campos, una que contenga la palabra Juan, el siguiente, la palabra Perez, y
el ultimo campo la Palabra Gonzalez... Si todavia no me explico diganme.
Encontre como parsear, pero no lo puedo hacer que se ponga en una tabla...
Chea
2004-07-14 14:47:15 UTC
Permalink
Te paso un par de funciones para separar los apellidos. Tienen de peculiar
que cuenta con que ciertas partículas, "de la lo del el san los las dos das
" que forman parte del apellido y que no se pueden separar; si entre los
apellidos que vayas a usar hay otras (p. ej. Mc, Du etc. ) no tienes mas que
añadirlas a la lista.

En cualquier caso, la división siempre será imperfecta y, aunque ahorre
mucho trabajo, siempre tendrás que revisarlo a mano.

Public Function Primerap(Apellidos As String) As String
Dim i As Integer, temporal As String
i = InStr(Apellidos, " ")
If i <> 0 Then
temporal = Left(Apellidos, i)
Do While InStr("de la lo del el san los las dos das ", temporal) <>
0
temporal = temporal & Primerap(Right(Apellidos, Len(Apellidos) -
(Len(temporal))))
Loop
Else
temporal = Apellidos
End If
Primerap = temporal
End Function


Public Function Segundoap(Apellidos As String) As String
Dim temporal As String
temporal = Right(Apellidos, Len(Apellidos) - Len(Primerap(Apellidos)))
Segundoap = Primerap(temporal)

End Function
--
Saludos.

José Bengoechea Ibaceta [MS-MVP Access]
http://perso.wanadoo.es/j.bchea
Me pasaron una lista de nombres, sin embargo ocupo separarlos en tres
columnas, apellido materno, paterno y nombres. Cual es la forma mas facil
de hacer esto??
Alex
2004-07-16 00:16:01 UTC
Permalink
Listo, Gracias a todos por su valiosa ayuda... Use la solucion de Victor, pero me quedo esta duda, no seia posible, usando una formula similar, el quitar los "_" a los nombres???

Lo intente hacer con mid, use el sintaxis

mid(strNombre, InStr(strNombre,"_"),1) = " "

pero no me dio resultado... que puse mal??
unknown
2004-07-16 00:46:13 UTC
Permalink
Para eso esta el 'Replace' (y la tecla F1,para apreciar sus cualidades)

De cualquier forma, tu expresión, indica que no has entendido como funciona ... (suspendido, repasa la lección)
Te diré, que se puede hacer, de hecho en Access 97 (no tenia implementada la función Replace), había que hacerlo con ese método.

Un saludo E. Feijoo
P.D.
Te diré que 'ese' truco se utilizaba con los billetes de mil pesetas y superiores, consistía en cortar varios y unirlos con celo (en cada corte se 'perdía' un trocito de su ancho), la suma de los trocitos creaba un nuevo billete (mientras les duro la picaresca)


"Alex" <***@discussions.microsoft.com> escribió en el mensaje news:C8AC6C75-B934-470D-9971-***@microsoft.com...
| Listo, Gracias a todos por su valiosa ayuda... Use la solucion de Victor, pero me quedo esta duda, no seia posible, usando una formula similar, el quitar los "_" a los nombres???
|
| Lo intente hacer con mid, use el sintaxis
|
| mid(strNombre, InStr(strNombre,"_"),1) = " "
|
| pero no me dio resultado... que puse mal??
Victor Delgadillo
2004-07-16 10:37:19 UTC
Permalink
Deberia funcionar, excepto si InStr(strNombre, "_"),1) = 0 porque no tenga
el caracter "_"
Prueba con:
If InStr(strNombre, "_") > 0 Then
Mid(strNombre, InStr(strNombre, "_"),1) = " "
End If


--
Victor Delgadillo [MVP Access]
Miami, Florida

Consultas al grupo, asi todos nos beneficiamos.
Vea los MVP: http://www.microsoft.com/communities/mvp/mvp.mspx
Post by Alex
Listo, Gracias a todos por su valiosa ayuda... Use la solucion de Victor,
pero me quedo esta duda, no seia posible, usando una formula similar, el
quitar los "_" a los nombres???
Post by Alex
Lo intente hacer con mid, use el sintaxis
mid(strNombre, InStr(strNombre,"_"),1) = " "
pero no me dio resultado... que puse mal??
Loading...