[RESUELTO] Verificar fin de archivo de texto (eof)

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...

[RESUELTO] Verificar fin de archivo de texto (eof)

Notapor fedevi » Jue Nov 05, 2015 4:54 pm

Hola a todos en foro, soy nuevo aqui en el foro y en libreoffice, mi consulta está referida a leer un archivo de texto caracter a caracter e ir cargando esos datos en una base, pero no se como saber cuando llego al final del archivo para terminar el proceso. A la lectura la realizo como lo indica el usuario mauricio en este post https://forum.openoffice.org/es/forum/viewtopic.php?f=50&t=2809, desde ya muchas gracias.

Federico
Última edición por fedevi el Mar Nov 24, 2015 3:49 pm, editado 1 vez en total
OpenOffice 4.1.2 - Windows 7
fedevi
 
Mensajes: 33
Registrado: Lun Oct 26, 2015 9:01 pm

Re: Verificar fin de archivo de texto (eof)

Notapor mauricio » Jue Nov 05, 2015 5:17 pm

¿lees cada caracter y este lo cargas en una base de datos?... por mera curiosidad... ¿para que usas esto?...

Por otra parte con EasyDev: http://easydev.readthedocs.org/es/latest/
Código: Seleccionar todo   Expandir vistaContraer vista
data = util.fileOpen("/home/USER/log.txt", "r", False)
util.msgbox(data)

puedes leer fácilmente y de una vez cualquier archivo, procesar caracter a caracter es trivial.


Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5873
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Verificar fin de archivo de texto (eof)

Notapor fedevi » Vie Nov 06, 2015 2:44 am

Hola mauricio, muchas gracias por responder, mi intención es realizar una impresión de etiquetas cuyos datos vienen en un archivo de texto con los campos separado por comas( codigo, precio, descripcion, etc), entonces tuve la idea de colocarlos en una base de datos para luego imprimirlos realizando un reporte, o un archivo de etiquetas de write, no tengo definido como lo haré, ya que soy nuevo en libre office, estoy buscándole la vuelta al asunto leyendo el libro "LibreOffice Basic" que baje del foro, bueno espero cualquier sugerencia, muchas gracias

Federico
OpenOffice 4.1.2 - Windows 7
fedevi
 
Mensajes: 33
Registrado: Lun Oct 26, 2015 9:01 pm

Re: Verificar fin de archivo de texto (eof)

Notapor mauricio » Vie Nov 06, 2015 2:59 am

fedevi escribió:leer un archivo de texto caracter a caracter

Si vas a leer un CSV no es necesario leerlo caracter a caracter... puedes importarlo de un solo paso sin problemas... por aquí en el foro hay varios ejemplos. aunque también lo tengo planeado en EasyDev de una forma mucho más simple.

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5873
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Verificar fin de archivo de texto (eof)

Notapor mauricio » Vie Nov 06, 2015 5:48 am

Si quieres probar a importar un CSV, lo he agregado a la versión de desarrollo: https://github.com/UniversoLibreMexicoA ... v2.1.0.oxt

http://easydev.readthedocs.org/en/devel ... import-csv

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5873
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Verificar fin de archivo de texto (eof)

Notapor RMG » Vie Nov 06, 2015 10:54 am

Hola,

Solo entro en este hilo por el tema de las etiquetas. En el enlace tienes un ejemplo para crearlas en un informe de Base, el tope son hasta nueve columnas.

Espero que te sirva.

https://forum.openoffice.org/es/forum/v ... 70&t=10503

Saludos
OpenOffice 4.1.6 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
RMG
 
Mensajes: 3523
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Verificar fin de archivo de texto (eof)

Notapor fedevi » Sab Nov 07, 2015 1:37 pm

muchas gracias por las respuestas, lo pruebo y les cuento que tal, un abrazo

Federico
OpenOffice 4.1.2 - Windows 7
fedevi
 
Mensajes: 33
Registrado: Lun Oct 26, 2015 9:01 pm

Re: Verificar fin de archivo de texto (eof)

Notapor fedevi » Sab Nov 07, 2015 3:22 pm

mauricio, incorpore el easydev, pero no veo el procedimiento para importar el csv, y al tratar de copiar el que me sugeriste de la pagina easydev no puedo ya que no me deja escribir ni cambiar nada de las librerias, disculpame si la pregunta es medio tonta pero estoy recien arrancando y me apabulla un poco tanta información y tantas cosas que se me ocurren para hacer, RMG la próxima sigo con lo que me sugeriste, saludos

Federico
OpenOffice 4.1.2 - Windows 7
fedevi
 
Mensajes: 33
Registrado: Lun Oct 26, 2015 9:01 pm

Re: Verificar fin de archivo de texto (eof)

Notapor mauricio » Sab Nov 07, 2015 3:48 pm

______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5873
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Verificar fin de archivo de texto (eof)

Notapor fedevi » Dom Nov 08, 2015 10:18 pm

mauricio, deberia instalar python para poder utilizarlas? cuando en xubuntu ingreso a herramientas->macros->organizar macros solo me aparece libreoffice, en windows vi que aparece también python.
OpenOffice 4.1.2 - Windows 7
fedevi
 
Mensajes: 33
Registrado: Lun Oct 26, 2015 9:01 pm

Re: Verificar fin de archivo de texto (eof)

Notapor mauricio » Lun Nov 09, 2015 4:58 am

Código: Seleccionar todo   Expandir vistaContraer vista
sudo apt-get install libreoffice-script-provider-python
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5873
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Verificar fin de archivo de texto (eof)

Notapor fedevi » Lun Nov 09, 2015 8:19 pm

mauricio escribió:Por otra parte con EasyDev: http://easydev.readthedocs.org/es/latest/
Código: Seleccionar todo   Expandir vistaContraer vista
data = util.fileOpen("/home/USER/log.txt", "r", False)
util.msgbox(data)

puedes leer fácilmente y de una vez cualquier archivo, procesar caracter a caracter es trivial.


mauricio, pude cargar en la variable data el archivo, con las otras librerias no doy en el clavo asi que las veré mas adelante, ahora la idea que me propones es leer los campos desde esta variable e ir asignandolos a los campos de la base?
OpenOffice 4.1.2 - Windows 7
fedevi
 
Mensajes: 33
Registrado: Lun Oct 26, 2015 9:01 pm

Re: Verificar fin de archivo de texto (eof)

Notapor mauricio » Lun Nov 09, 2015 8:27 pm

No me has leido atentamente, como dije más arriba, si tienes un CSV, lo importas con una línea y tienes todo su contenido en un array:
http://easydev.readthedocs.org/en/devel ... import-csv

en el ejemplo lo mando a las celdas de la hoja de calculo, en tu caso solo tienes iterar para para determinar a que campo de tu base de datos corresponde cada valor, pero, dependiendo de tu base de datos que estes usando, tal vez se pueda enviar directamente.
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5873
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Verificar fin de archivo de texto (eof)

Notapor fedevi » Jue Nov 19, 2015 8:58 pm

de vuelta, esta vez con una solución, no se si es la forma mas óptima pero funciona, me demoré ya que tuve que leer y releer el manual para comprender conceptos, bueno mauricio espero una opinión de que te parece y si está para dar el tema por resuelto, espero ser de ayuda a la comunidad, saludos

Código: Seleccionar todo   Expandir vistaContraer vista
Option Explicit

Sub LeerArchivoDeTexto()
Dim co1 As Long
Dim sEAN As String
Dim sDescripcion As String
Dim sPrecioPublico As String
Dim data As String
Dim util As Object

Dim oDBC As Object
Dim oBD As Object
Dim oConexion As Object
Dim oDeclaracion As Object
Dim oResultado As Object
Dim sBaseDatos As String
Dim sSQL As String
     
      'el nombre de la base es el que está registrado en LO
      sBaseDatos = "base_eti_LO"
      oDBC = createUnoService("com.sun.star.sdb.DatabaseContext")
     
     
      If oDBC.hasByName( sBaseDatos ) Then
         oBD = oDBC.getByName( sBaseDatos )
         oConexion = oBD.getConnection("","")
         oDeclaracion = oConexion.createStatement()
                        'borro los registros de la tabla
         sSQL = "DELETE FROM tblTABLA"
         oDeclaracion.executeUpdate( sSQL)   
         util = createUnoService("org.universolibre.EasyDev")
         data = util.fileOpen("/home/fede/libreoffice/archivos de texto/archivoCSV.txt", "r", False)
       
        'El archivo puede ser más grande pero no cabe en una variable String
        'verificamos que el archivo no sea mas grande que el tipo de dato string   
           
         if len(data) < 65535 Then
        ´los registros o renglones del archivo tienen 80 caracteres de longitud
            For co1 = 1 To Len(data) step 80
              
              
               sEAN = Mid( data, co1, 12 )
               sDescripcion = Mid( data, co1+13, 32 )
               sPrecioPublico =  Mid( data, co1+46, 8 )

               'La linea de abajo es solo para verificar la carga de los datos, o sea no es necesaria para el funcionamiento
               'MsgBox (sEAN & Chr(13) & sDescripcion & Chr(13) & sPrecioPublico & Chr(13) & sUnidadDeMedida & Chr(13) & sTamano & Chr(13) & sPrecioPorUnidad)

               sSQL = "INSERT INTO ""CARTELES"" (""EAN"",""DESCRIPCION"",""PRECIO"") VALUES ('" & sEAN & "','" & sDescripcion & "','" & sPrecioPublico & "')"
            oDeclaracion.executeUpdate( sSQL)
                                'sumo una posicion para considerar el caracter de salto de linea
            co1 = co1+1
            Next
               
         'Cerramos las conexiones      
         oDeclaracion.close()
         oConexion.close()
         'Liberamos la memoria
         oResultado = Nothing
         oDeclaracion = Nothing
         oConexion = Nothing
            MsgBox "El Proceso de carga de datos terminó correctamente."
         
         Else
            MsgBox "Archivo demasiado grande"
         End If
      
   Else
     MsgBox "La base de datos no está registrada. Verifique"
   End If 'oDBC       
   
End Sub
OpenOffice 4.1.2 - Windows 7
fedevi
 
Mensajes: 33
Registrado: Lun Oct 26, 2015 9:01 pm

Re: Verificar fin de archivo de texto (eof)

Notapor mauricio » Jue Nov 19, 2015 9:19 pm

¿Tienes un archivo CSV o un archivo con registros de ancho fijo?, en el primer caso no se necesario uses fileOpen, si no: http://easydev.readthedocs.org/en/lates ... import-csv
para el caso de ancho fijo, puedes devolver los datos en un array, con lo que eliminas el problemas del tamaño de un string:
Código: Seleccionar todo   Expandir vistaContraer vista
data = util.fileOpen("/home/USER/log.txt", "r", True)
util.msgbox(data)

por otra parte, este es un buen ejemplo para agregar a EasyDev, se me ocurre de primera instancia:
Código: Seleccionar todo   Expandir vistaContraer vista
util.fileToDB(PATH_FILE, DB_NAME, OPTIONS)

con lo que podríamos importar a una base de datos, con una línea...

Saludos

P.D. Si para ti consideras que esta resuelto, con eso es suficiente...
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5873
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Verificar fin de archivo de texto (eof)

Notapor fedevi » Jue Nov 19, 2015 11:38 pm

buenisimo, realmente me gratifica mucho que sea de utilidad, saludos
OpenOffice 4.1.2 - Windows 7
fedevi
 
Mensajes: 33
Registrado: Lun Oct 26, 2015 9:01 pm


Volver a Macros y API UNO

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados