[RESUELTO]Convertir texto a numero

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Dante
Mensajes: 18
Registrado: Vie May 07, 2010 11:56 pm

[RESUELTO]Convertir texto a numero

Mensaje por Dante »

Buenos dias
Mi problema es que he creado una macro que me exporta datos de un documento (.txt) a una hoja de calculo (calc) pero al hacerlo me exporta los numeros como texto (string) ('4,699993E-2) con la comilla delante del numero, y no puedo hacer calculo con esos numeros al tomarlo como texto.
La idea es que me exporte y poder procesar esos datos de forma automatica, pues la cantidad de archivos es grande.
Última edición por Dante el Jue May 27, 2010 6:08 pm, editado 1 vez en total.
OpenOffice.org 3.2
Windows XP service pack 2
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Convertir texto a numero

Mensaje por mauricio »

Hola...

No se como este haciendo la importación en tu macro, pero lo mejor es indicarle que tipo de campo es cada uno para tener el resultado correcto... si nos muestras el código es más fácil ayudarte...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Dante
Mensajes: 18
Registrado: Vie May 07, 2010 11:56 pm

Re: Convertir texto a numero

Mensaje por Dante »

Hola
Te escribo el codigo.
La macro te abre una ventana para que busques el archivo y lo abre automaticamente. Tambien le hice para que no me de errores cuando cancelo esa ventana.

Código: Seleccionar todo

Sub Sonda

	Call abrirSonda()
	
	if salir = 1 then
		exit sub
	end if

	Call sonda0
End Sub

Private salir as integer

Sub AbrirSonda()
Dim oDlgAbrirArchivo as Object
Dim mArchivo() As String
Dim mOpciones()
Dim sRuta As String
Dim oDoc As Object

		salir = 0
        'Creamos el servicio necesario
        oDlgAbrirArchivo = CreateUnoService ("com.sun.star.ui.dialogs.FilePicker")
        'Establecemos el titulo del cuadro de dialogo
        oDlgAbrirArchivo.setTitle("Selecciona el archivo a abrir")
        'Con el metodo .Execute() mostramos el cuadro de dialogo
        'Si el usuario presiona Abrir el metodo devuelve 1 que podemos evaluar como Verdadero (True)
        'Si presiona Cancelar devuelve 0
        If oDlgAbrirArchivo.Execute() Then
                'De forma predeterminada, solo se puede seleccionar un archivo
                'pero devuelve una matriz de todos modos con la ruta completa
                'del archivo en formato URL
                mArchivo() = oDlgAbrirArchivo.getFiles()
                'El primer elemento de la matriz es el archivo seleccionado
                sRuta = mArchivo(0)
                'Y lo abrimos
                oDoc = StarDesktop.loadComponentFromURL( sRuta, "_blank", 0, mOpciones() )
        Else
                'Si el usuario presiona Cancelar
                MsgBox "Proceso cancelado"
              	salir = 1
   		End If
        
End Sub
En esta parte trabajo con el archivo abierto, un .txt, selecciono y copio todo; luego busco mi macro por el nombre, hice una funcion para esto (buscarpag) que me busca el archivo y me lo activa y en una hoja especifica, para luego pegar los datos ahi.

Código: Seleccionar todo

Sub sonda0
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:SelectAll", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

document.close(True)

Call sonda0a

End Sub

Sub sonda0a

Dim oDocumentos As Object
Dim oDocumento As Object
Dim oVentana As Object
Dim oEnumeraDocumentos As Object

	buscarpag("Macro Sonda.ods" , "Macro")

dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")


	Dim oHoja As Object

        oHoja = ThisComponent.getSheets().getByName("Datosond")
        
        oHoja.isVisible = True
        
   	Dim Hoja As Object
	
	Hoja = ThisComponent.getSheets.getByName("Datosond")
    'La activamos
    ThisComponent.getCurrentController.setActiveSheet(Hoja) 


rem ----------------------------------------------------------------------

rem ----------------------------------------------------------------------
dim args1a(0) as new com.sun.star.beans.PropertyValue
args1a(0).Name = "ToPoint"
args1a(0).Value = "$A$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1a())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())

End sub

OpenOffice.org 3.2
Windows XP service pack 2
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Convertir texto a numero

Mensaje por mauricio »

Hola...

¿El archivo a importar siempre tiene la misma estructura?, esto facilita la importación de los datos, ¿puedes subir un ejemplo de este archivo? y si dices que tienes que importar que hacerlo con una cantidad grande de archivos, puedes importar todos los que quieras...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Dante
Mensajes: 18
Registrado: Vie May 07, 2010 11:56 pm

Re: Convertir texto a numero

Mensaje por Dante »

Hola
Si, felizmente el archivo a importar tiene la misma estructura, te adjunto el archivo.
Me salio un error, que no puede adjuntar con extensiones .txt, lo cambie a .odt el archivo.

Otra cosa, omiti sin querer algunas partes del codigo, no se si influira mucho. En la parte de abrir el archivo .txt, lo cual lo hace en el writer, en esa parte modifico los espacios con buscar y reemplazar, de ahi copio todo y lo pego a la hoja de calculo, todo por medio de la macro.

El archivo que te he adjuntado esta cortado, el original pesa mas de 2 MB y me sale error jeje.
Para que entiendas el archivo, la primera linea son los titulos, tiempo, rms, y las frecuencias; de la segunda linea vienen los datos, cada linea es un conjunto de datos, asi que no hay problema, el formato es igual, solo que con mas lineas, unas 500 mas jeje.
Adjuntos
Buffer2_5a.odt
(22.47 KiB) Descargado 347 veces
OpenOffice.org 3.2
Windows XP service pack 2
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Convertir texto a numero

Mensaje por mauricio »

Hola...

Por favor, agrega el archivo TXT original, con unas cuantas líneas representativas es suficiente, comprimelo en ZIP o 7ZIP para que te lo acepte el foro...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Dante
Mensajes: 18
Registrado: Vie May 07, 2010 11:56 pm

Re: Convertir texto a numero

Mensaje por Dante »

Ok
Te adjunto el archivo comprimido.
Adjuntos
Buffer2_5a.zip
(3.67 KiB) Descargado 296 veces
OpenOffice.org 3.2
Windows XP service pack 2
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Convertir texto a numero

Mensaje por mauricio »

Hola...

Te anexo el archivo de como lo importa Calc, esto lo hice manualmente por ahora, es necesario para saber como quieres el final. No es estoy seguro pero confirmame, ¿los títulos son Time RMS SPL y todo lo demás son datos? veo que es un ancho fijo para los datos, ¿así es?, algunos datos tienen ancho fijo y otros están separados por tabulador, generalmente este tipo de archivos tiene una estructura constante, te lo comento por que, como puedes ver en el archivo anexo, al menos tu archivo, no trae un salto de línea entre los títulos y entre muchas de las líneas, si así viene tu archivo TXT original va a complicar solo un poco el proceso, muestrame como esta dejando tu macro el archivo final, supongo que solo te faltaría que reconozco los números como planteabas en el primer mensaje de este tema, pero tal vez podamos hacer la importación directa en Calc...

Saludos
Adjuntos
Buffer2_5a.ods
(16.94 KiB) Descargado 319 veces
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Dante
Mensajes: 18
Registrado: Vie May 07, 2010 11:56 pm

Re: Convertir texto a numero

Mensaje por Dante »

Que tal Mauricio

Con respecto a los titulos, es toda la primera liniea: Time, RMS, SPL y los 32 numeros siguientes.
He estado avanzando algo, he logrado que me lo exporte como dato, pero me sale la ventana de pegado especial, el cual tengo que seleccionar Texto sin formato y luego en Importar texto, el de separado por Espacio.
Todo me lo pone en datos, y como la primera linea es de titulo, siempre es igual, le hice una mascara el cual solo lo pego encima y soluciono esa parte de los titulos.
Te adjunto el archivo para que veas como deseo que quede al final.
Adjuntos
buffer.ods
(18.79 KiB) Descargado 330 veces
OpenOffice.org 3.2
Windows XP service pack 2
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Convertir texto a numero

Mensaje por mauricio »

Hola...

Tengo varias preguntas: la primer línea de títulos, ¿siempre es la misma, exactamente igual?, si es así esto nos permite omitirla e insertarla por código, veo que repites al final de nuevo los títulos excepto el Tiempo, pero no veo como obtienes los valores finales, por que no son promedio, ni máximos ni mínimos, ¿como los obtienes?
imagen2.png
El separador de los campos, es un tema muy importante, no se si hay un problema con la estructura de tu archivo o tu programa fuente no lo genera consistentemente, me explico con la siguiente imagen.
imagen1.png
Si seleccionamos tabulador como separador de campos, observa como Time, RMS y SPL no están separados por tabulador, si seleccionamos espacio, los datos numéricos no están separador por este, si no por un tabulador y si seleccionamos ancho fijo, de nuevo los títulos no están correctamente estructurados, pues queda un espacio entre SPL y 16 Hz.

Si tu programa fuente así lo genera y no hay modo de cambiarlo, yo haría lo siguiente; omitiría la importación de la primer fila de los títulos para insertarlos posteriormente por código, importaría las restantes filas separando por el tabulador, daría formato y listo.

Espero tus respuestas y comentarios.

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Dante
Mensajes: 18
Registrado: Vie May 07, 2010 11:56 pm

Re: Convertir texto a numero

Mensaje por Dante »

Que tal

Respondiendo a tus preguntas:
Los títulos son iguales siempre, se puede insertar por código, lo que yo hice fue esos titulos ya tenerlos listos en otra hoja ( hoja plantilla ) y lo que hacia era copiar y pegar encima.
Respecto a los valores al final, son tres operaciones, las cuales hice una función y los hace automaticamente, pero mejor te adjunto de nuevo y con las formulas, para que entiendas mejor.

En el archivo estan las operaciones al costado de la tabla, es primero el antilogaritmo , de ahi el promedio de esos antilogaritmos por columnas y por ultimo el logaritmo de ese promedio.

Respecto a eso de los tabuladores, te soy sincero, no entiendo mucho, lo que se es que el programa fuente genera en archivos con extension .txt y no se puede configurar eso.
Los titulos no tienen importancia asi que, como tu dices, se puede omitir eso e insertalos por codigo, y luego eso de separarlos por el tabulador y darle formato a los demas datos.

Te comento que estas cosas tendria que hacerse en forma automatica, la razon es porque lo que estoy haciendo, las macros para procesar estos archivos luego se van a otra area de mi trabajo, y el operario solo tiene que escoger el archivo y correr el programa y listo. Asi que mejor, me demoro y lo hago lo mas simple, para no tener problemas a futuro.
Espero me ayudes, o dar una solucion alternativa a la cual siempre estoy abierto a escuchar.
Adjuntos
Buffer.ods
(34.57 KiB) Descargado 332 veces
OpenOffice.org 3.2
Windows XP service pack 2
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Convertir texto a numero

Mensaje por mauricio »

Hola...

Croe que ya esta completo, por favor, checa el archivo anexo que importa los datos de archivos de texto con la estructura de tu archivo de muestra y los deja con el formato de tu archivo también de muestra... hago de una plantilla que te incluyo, puedes cambiarle el formato que quieras, pero no cambies el número de columnas en la hoja datos, ni la posición en la hoja Resumen...

Por favor, si esto responde tu pregunta, edita el primer mensaje de este hilo y agrega al principio del título la etiqueta [RESUELTO], de esta forma conseguiremos un foro más ordenado.

Saludos
Adjuntos
ImportarTXT.7z
(18.95 KiB) Descargado 354 veces
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Dante
Mensajes: 18
Registrado: Vie May 07, 2010 11:56 pm

Re: Convertir texto a numero

Mensaje por Dante »

Excelente

Muchas gracias, perfecto sale, ahora estoy viendo los codigo y descifrando cada uno para que sirve, jeje.
Cualquier consulta por algo que no entienda te lo hare saber.
OpenOffice.org 3.2
Windows XP service pack 2
Responder