Página 1 de 1
Necesito detectar palabras en mayusculas dentro cadena
Publicado: 03 Jul 2012, 06:14
por morkcop
Hola amigos, luego de mucho dar vueltas, la verdad no me queda otra que molestarles a los que mas saben.
PROBLEMA:
Les cuento mi problema, tengo en un archivo de excel que en una sola columna tiene el apellido y el nombre junto (ej.: "PIÑA SOSA Marco Ulises"), y debo separarlos, lo único que tengo a favor es que el apellido lo han escrito siempre en mayúsculas y el nombre solo la primera letra como en el ejemplo anterior, ha! el archivo de excel cuenta con 1300 alumnos por año, y tengo archivos de 5 años aproximadamente, todos en iguales condiciones.
¿PARA QUE NECESITO ESTO?:
Necesito este script para poder cargar una base de datos de un archivo excel a un archivo access donde el apellido y el nombre están en diferente celdas.
IDEA PARA LA SOLUCION:
Pienso que debo crear un script que identifique en una celda la cadena que contiene y de esa cadena que palabras esta escritas en mayúsculas, que es el apellido y las palabras que no son los nombres, es decir, que debe "leer" en la cadena que palabra esta en mayúsculas (apellido) y pegarla en un lugar y las que no están en mayúsculas pegarlas en otro lado, de ese modo voy a obtener como resultado de una celda que dice "PIÑA SOSA Marco Ulises" dos celdas contiguas una con "PIÑA SOSA" y otra con "Marco Ulises".
Me pueden ayudar, no se ni por donde empezar, si tienen una mejor idea con la que obtener el mismo resultado sera bienvenido.
Gracias.
Re: Necesito detectar palabras en mayusculas dentro cadena
Publicado: 03 Jul 2012, 12:39
por jamaro
Hola morkcop:
No tengo claro si lo que quieres hacer es en Autoit o en la hoja de cálculo, o si quieres manipular la hoja de cálculo desde Autoit.
Para solucionar el tema de la búsqueda de mayúsculas y separar apellidos y nombre, este sencillo código que te he preparado te puede servir:
Código: Seleccionar todo
; Comparar mayúsculas
#include <Array.au3>
opt("MustDeclareVars",1)
Dim $cadena="PIÑA SOSA Marco Ulises"
Dim $matrizcadena=StringSplit($cadena," ")
;_ArrayDisplay($matrizcadena)
Dim $apellidos="", $nombre=""
For $a=1 to $matrizcadena[0]
if StringIsUpper($matrizcadena[$a]) then
$apellidos=$apellidos & " " & $matrizcadena[$a]
Else
$nombre = $nombre & " " & $matrizcadena[$a]
EndIf
Next
$apellidos=StringTrimLeft($apellidos,1)
$nombre=StringTrimLeft($nombre,1)
MsgBox(0,"Resultado","El texto: " & @CRLF & @CRLF & $cadena & @CRLF & @CRLF & "se descompone en: " & @CRLF & @CRLF & "APELLIDOS: " & @TAB & $apellidos & @CRLF & "NOMBRE: " & @TAB & $nombre)
Si necesitas más ayuda, ya sabes donde está el foro y su gente
Re: Necesito detectar palabras en mayusculas dentro cadena
Publicado: 03 Jul 2012, 15:02
por morkcop
Hola, Jamaro, si, quiero manipular la hoja de calculo desde autoit, gracias por tu preocupacion me podrias explicar que hace cada linea de programacion, veo que incluis un archivo externo como si se tratara de una libreria, me equivoco?
Te explico me gustaria despues de que tome la variable que es la cadena que contiene "PIÑA SOSA Marco Ulises" y atraves de un cierto proceso me devuelve dos variantes $apellidos y $nombres, con el ejemplo de la cadena anterior en la variable $apellidos debe contener "PIÑA SOSA" y en la variable $nombres "Marco Ulises" de este modo ya se que puedo hacer que es colocar cada dato en en una hoja de excel distinta y en celdas separadas para luego ser exportadas a access. Gracias.
Re: Necesito detectar palabras en mayusculas dentro cadena
Publicado: 03 Jul 2012, 15:13
por jamaro
El include lo había utilizado simplemente para comprobar el resultado de la matriz con array display cuya línea está comentada. Puedes eliminar ambas líneas para este caso.
Antes de seguir ¿Podrias indicarnos exactamente que es lo que quieres?
Por lo que leo tienes datos en una hoja excel y parece que al final la quieres pasar a access.
Dependiendo de lo que quieras exactamente, Archivo de origen, Archivo destino,... Podremos echarte una mano ya que cada cosa requiere una manera de plantear el programa.
Saludos
Re: Necesito detectar palabras en mayusculas dentro cadena
Publicado: 03 Jul 2012, 15:24
por morkcop
Perdon jamaro, pero como vi la respuesta desde mi celular no vi el codigo completo, dentro de un rato lo prueba y muchisimas gracias.
Re: Necesito detectar palabras en mayusculas dentro cadena
Publicado: 03 Jul 2012, 15:30
por morkcop
Siiiiii, señor, espectacular sos un genio vaya saber cuantos días hubiese estado para lograr algo similar, muchisimas gracias, ya me pongo a revisarlo bien, sentencia por sentencia y ha desmenuzarlo para analizar cada una de sus lineas, realmente te lo agradezco ta vez es algo muy sencillo para ti, pero para mi supone una ayuda inmensa. Nuevamente musichisimas gracias. Estamos en contacto y gracias por tu tiempo y dedicación.-
Re: Necesito detectar palabras en mayusculas dentro cadena
Publicado: 04 Jul 2012, 03:09
por Chefito
Mmmmmmm, bien por jamaro
.
Aunque viendo un poco lo que necesitas, pienso que con el vba de excel te basta y te sobra. Así no necesitarías un script externo, pudiendo estar todo el código en el mismo libro excel
. Por supuesto tienes que dar permiso a la macro para que se ejecute. Si no te fías, no le des permiso la primera vez y mira el código vba que he hecho de ejemplo para esta pequeña hoja. Verás que no hay ningún código maligno en ella.
Yo lo que he hecho es ir comprobando letra por letra hasta encontrar una mayúscula. Cuando la encuentro, formo el nombre y los apellidos.
Se podría hacer como ha hecho jamaro, separar los nombres y apellidos con un split, y después comprobar cual de estos está en mayúsculas y cuales no para finalmente formar el nombre y apellidos. Como ya lo hizo jamaro (es facil de pasar el código a vba), quería mostrar otra forma de hacerlo.
Te adjunto el archivo.
Si lo quieres hacer en autoit, piensa que puedes insertar en la propia hoja excel, los datos obtenidos con el código de jamaro utilizando la función _ExcelWriteCell contenida en la udf Excel.au3 (incluída en el propio autoit). Mírala en la ayuda.
También podrías utilizar código y alguna udf de access (búscala en el foro ingles) para poder conectar y crear una base de datos con estos datos. Pero eso es otra historia. Además, piensa que el propio paquete office está muy bien interrelacionado y puedes hacer estas conversiones facilmente.
Saludos.
Re: Necesito detectar palabras en mayusculas dentro cadena
Publicado: 04 Jul 2012, 03:43
por morkcop
Hola Chefito, te agradezco lo voy a probar, total planillas para pasar tengo muchísimas. Les agradezco por su interés.
Re: Necesito detectar palabras en mayusculas dentro cadena
Publicado: 04 Jul 2012, 04:10
por morkcop
Chefito, lo descargue y vi como funciono, pero como lo aplico? como revsiso la programación, no tengo ni idea de macros en excel, decime, puedo seleccionar toda la columna que tiene el apellido y nombre junto y que se separe automaticamente en las columnas del lado?
Re: Necesito detectar palabras en mayusculas dentro cadena
Publicado: 04 Jul 2012, 11:57
por Chefito
Mmmmm, pues si no tienes ni idea de macros de excel y programación vba aplicada a excel para eso esta la ayuda de excel que es muy buena y google. Hay que molestarse un poquito e intentar averiguar algo de lo que te dicen
.
Te explico un poco. Esto lo he hecho con el excel 2007. Se puede hacer con cualquier versión de excel.
Para ver la pestaña "programación" (en un principio debe estar oculta), tienes que meterte en el icono de office (el circulo situado en la esquina superior izquierda), y abajo tienes que cliquear el botón "Opciones de excel". Tienes que señalar "Más frecuentes">"Mostrar ficha de programador en la cinta de opciones", y aceptar. Entonces te aparecerá al final una nueva pestaña llamada "Programador" en la barra de menús. Y dentro de ésta debes darle al primer icono de la barra de herramientas llamado "Visual Basic". En ese momento te aparecerá el "Editor de Visual Basic" con el código que he utilizado, el cual es este:
Código: Seleccionar todo
Private Sub Workbook_Open()
Dim nombre As String, apellidos As String
For x = 1 To 5
nombre = ""
apellidos = ""
vnombrecompleto = Hoja1.Cells(x, 1)
For n = 1 To Len(vnombrecompleto)
letra = Mid(vnombrecompleto, n, 1)
If letra <> UCase(letra) Then
apellidos = Left(vnombrecompleto, n - 3)
nombre = Right(vnombrecompleto, Len(vnombrecompleto) - n + 3)
Exit For
End If
Next
Hoja1.Cells(x, 4).Value = nombre
Hoja1.Cells(x, 5).Value = apellidos
Next
End Sub
Es muy fácil de entender, pero si tienes dudas de algo pregunta. Para saber que hace cada comando, señálalo y dale al f1 (ayuda). Analiza el código, intenta entenderlo, y si dudas en algo pregunta. Es tan sencillo y tan parecido a autoit que cualquier persona de aquí te podría ayudar y orientar.
Saludos.
Re: Necesito detectar palabras en mayusculas dentro cadena
Publicado: 05 Jul 2012, 00:46
por morkcop
Chefito, bueno muchas gracias lo voy a probar. Igual uso bastante vb 6, ahora estoy por hacer un sistema de gestión para el colegio en donde trabajo, pero nunca use vba en excel por eso estoy tan perdido. Utilice la programación de Jamaro con algunas modificaciones porque estoy mas familiarizado y anduvo perfecto, luego subo el script au3 y un video para que lo vean en acción, igual voy a analizar el código vba, siempre es bueno saber mas. Si tu sabes mucho de programación en vb 6, voy a necesitar mucha ayuda. Gracias a todos.
Re: Necesito detectar palabras en mayusculas dentro cadena
Publicado: 05 Jul 2012, 11:39
por Chefito
Hombre, yo estuve bastaste tiempo con vb6 (creo que de 7 a 8 años), pero lo tengo abandonado desde hace unos 5 o 6 (es un lenguaje obsoleto). Sabía bastante.
Yo supongo que te podría ayudar, pero este no es el foro ni el lugar. Si tienes alguna duda hay foros muy buenos de vb6. Si quieres postear aquí dudas de este tipo, hazlo en el subforo Chat. Hay puedes hablar y preguntar de lo que quieras.
El vba es como una pequeña restrinción del lenguaje vb6. Vamos, que si sabes programar en vb6 sabes programar en vba
. Lo único que tienes que tener en cuenta son los eventos, métodos y propiedades (y los objetos) propios que posee el office. Para eso tienes una ayuda estupenda en el editor de visual basic que te explica bastante bien las cosas.
Saludos.
Re: Necesito detectar palabras en mayusculas dentro cadena
Publicado: 12 Jul 2012, 14:11
por rgracia
Chefito escribió:Hombre, yo estuve bastaste tiempo con vb6 (creo que de 7 a 8 años), pero lo tengo abandonado desde hace unos 5 o 6 (es un lenguaje obsoleto). Sabía bastante.
Yo supongo que te podría ayudar, pero este no es el foro ni el lugar. Si tienes alguna duda hay foros muy buenos de vb6. Si quieres postear aquí dudas de este tipo, hazlo en el subforo Chat. Hay puedes hablar y preguntar de lo que quieras.
El vba es como una pequeña restrinción del lenguaje vb6. Vamos, que si sabes programar en vb6 sabes programar en vba
. Lo único que tienes que tener en cuenta son los eventos, métodos y propiedades (y los objetos) propios que posee el office. Para eso tienes una ayuda estupenda en el editor de visual basic que te explica bastante bien las cosas.
Saludos.
Estoy de acuerdo, llevo dos años usando el VBA en el trabajo para Excel y la ayuda es de maravilla.
Si manejas AutoIt el VBA te va a ser muy fácil.
Las dos soluciones me han gustado xD, fijo que yo hubiera hecho una menos eficiente.