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

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
fedevi
Mensajes: 33
Registrado: Lun Oct 26, 2015 9:01 pm

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

Mensaje por fedevi »

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/v ... =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
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Verificar fin de archivo de texto (eof)

Mensaje por mauricio »

¿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

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
fedevi
Mensajes: 33
Registrado: Lun Oct 26, 2015 9:01 pm

Re: Verificar fin de archivo de texto (eof)

Mensaje por fedevi »

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
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Verificar fin de archivo de texto (eof)

Mensaje por mauricio »

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: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Verificar fin de archivo de texto (eof)

Mensaje por mauricio »

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
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Verificar fin de archivo de texto (eof)

Mensaje por RMG »

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.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
fedevi
Mensajes: 33
Registrado: Lun Oct 26, 2015 9:01 pm

Re: Verificar fin de archivo de texto (eof)

Mensaje por fedevi »

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)

Mensaje por fedevi »

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
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Verificar fin de archivo de texto (eof)

Mensaje por mauricio »

______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
fedevi
Mensajes: 33
Registrado: Lun Oct 26, 2015 9:01 pm

Re: Verificar fin de archivo de texto (eof)

Mensaje por fedevi »

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
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Verificar fin de archivo de texto (eof)

Mensaje por mauricio »

Código: Seleccionar todo

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
fedevi
Mensajes: 33
Registrado: Lun Oct 26, 2015 9:01 pm

Re: Verificar fin de archivo de texto (eof)

Mensaje por fedevi »

mauricio escribió: Por otra parte con EasyDev: http://easydev.readthedocs.org/es/latest/

Código: Seleccionar todo

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
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Verificar fin de archivo de texto (eof)

Mensaje por mauricio »

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
fedevi
Mensajes: 33
Registrado: Lun Oct 26, 2015 9:01 pm

Re: Verificar fin de archivo de texto (eof)

Mensaje por fedevi »

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

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
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Verificar fin de archivo de texto (eof)

Mensaje por mauricio »

¿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

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

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
fedevi
Mensajes: 33
Registrado: Lun Oct 26, 2015 9:01 pm

Re: Verificar fin de archivo de texto (eof)

Mensaje por fedevi »

buenisimo, realmente me gratifica mucho que sea de utilidad, saludos
OpenOffice 4.1.2 - Windows 7
Responder