Página 1 de 1

[RESUELTO] Problema con acentos usando Freefile

NotaPublicado: Sab Oct 24, 2015 3:47 pm
por DanielG
Buenos Días.

Tengo problemas con los acentos, en el momento de leer los datos de un archivo de bloq de Notas (.txt)

Trabajando con una macro de Writer, esta me pide Apellido, Nombres y nacionalidad. Luego las graba en un archivo llamado SiiLog2.txt

Al momento de ejecutar la macro que lee esos archivos, los acentos no aparecen.

El tema es que abro el archivo de textos con el block de notas, y los acentos allí están.

copio acá la macro de grabar archivo y la macro de leer archivo, a ver si me pueden dar una mano.

desde ya muchas gracias

Código: Seleccionar todo   Expandir vistaContraer vista
Sub GrabaArchivos2

    dim DocOrg As Object
    dim sRutaURL As String
    dim sRutaURL2 As String
    dim sRuta As String

      GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
      sRutaURL = ThisComponent.getURL()
      sRuta = ConvertFromUrl(sRutaURL)
      sRuta = DirectoryNameoutofPath(sRuta, GetPathSeparator())
      sRutaURL2 = ConvertToUrl(sRuta)
      sRutaURL2 = sRutaURL2 & "/SIIlog2.txt"
      DocOrg = ThisComponent.CurrentController.Frame
      
      dim sApell As String
      dim sNombr As String
      dim sNacio As String
      dim sRegis As String
      dim iLibre As Integer
   
      sApell = InputBox("Apellidos? ")
      sNombr = InputBox("Nombres?")
      sNacio = InputBox("Nacionalidad?")
      
      sRegis = "> " & sApell & ","   & sNombr & "," & sNacio & "," & _
               Format(Date, "ddd, dd-mmm-yy") & "," & Format(Now, "HH:mm:ss") & ",<"
            
      iLibre = FreeFile
      Open sRutaURL2 For Append As #iLibre
      Print #iLibre, sRegis
      Close #iLibre
      
End Sub



Código: Seleccionar todo   Expandir vistaContraer vista
Sub LeeArchivos2
    dim DocOrg As Object
    dim sRutaURL As String
    dim sRutaURL2 As String
    dim sRuta As String

      GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
      sRutaURL = ThisComponent.getURL()
      sRuta = ConvertFromUrl(sRutaURL)
      sRuta = DirectoryNameoutofPath(sRuta, GetPathSeparator())
      sRutaURL2 = ConvertToUrl(sRuta)
      sRutaURL2 = sRutaURL2 & "/SIIlog2.txt"
      DocOrg = ThisComponent.CurrentController.Frame   

   dim iLibre As Integer   
'     dim sApell As String
'   dim sNombr As String
'   dim sNacio As String
   dim sRegis(100) As String
   dim sCampo As String
   dim sLinea As String
    dim Cont1 As Byte
    dim Cont2 As Byte

   iLibre = Freefile : Cont1=0

   Open sRutaURL2 For Input As iLibre
      Do While Not eof(iLibre)
         Cont1 = Cont1 + 1 : sLinea =""
            For Cont2 = 1 To 7
               Input #iLibre, sCampo
               sLinea = sLinea & sCampo
               sRegis(Cont1) = sLinea
            next Cont2
      Loop
   Close #iLibre

   For Cont2 = 1 to Cont1
      MsgBox sRegis(Cont2)
   Next Cont2

End Sub

Re: Problema con acentos usando Freefile

NotaPublicado: Sab Oct 24, 2015 4:41 pm
por SLV-es
Es muy probable que sea el bloc de notas el que cambia la codificación del archivo de texto.
Prueba a abrir el archivo de texto (recién creado y sin abrirlo antes con nada) con NotePad++, y desde su menú Codificación, comprueba si el archivo se almacena en ANSI, UTF8 u otro juego de caractéres.
Luego lo abres con el bloc de notas, modificas, guardas, y comprueba de nuevo con NotePad++ si la codificación es la misma

Re: Problema con acentos usando Freefile

NotaPublicado: Sab Oct 24, 2015 5:01 pm
por DanielG
Hola, gracias por responder.

bajé el archivo Notepad++ y lo instalé.

Modifiqué la macro para que grabe en /SiiLog4.txt
Luego ejecuté la macro, en apellidos puse "Pérez"
Abrí con Notepad++ sale bien y la codificación figura "ANSI"
Abrí con el Block de notas y modifiqué un dato (pase de minuscula a mayúsculas una letra)

En el Notepad++ sigue figurando Codificación ANSI y sale bien (al igual que en block de notas que el acento sale bien), pero ejecuto la macro "leerArchivo4" y sale > Prez en lugar de Pérez

Re: Problema con acentos usando Freefile

NotaPublicado: Sab Oct 24, 2015 5:50 pm
por SLV-es
Parece ser que input tiene problemas con los acentos y ñ's

He probado con Line Input y lo digiere bien

Código: Seleccionar todo   Expandir vistaContraer vista
Sub LeeArchivos2
   Dim DocOrg As Object
   Dim sRutaURL As String
   Dim sRutaURL2 As String
   Dim sRuta As String

   GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
   sRutaURL = ThisComponent.getURL()
   sRuta = ConvertFromURL(sRutaURL)
   sRuta = DirectoryNameoutofPath(sRuta, GetPathSeparator())
   sRutaURL2 = ConvertToURL(sRuta)
   sRutaURL2 = sRutaURL2 & "/SIIlog2.txt"
   DocOrg = ThisComponent.CurrentController.Frame

   Dim iLibre As Integer
   Dim sRegis() As String
   Dim sLinea As String
   Dim n As Long

   iLibre = FreeFile

   Open sRutaURL2 For Input As iLibre
   Do While Not Eof(iLibre)
      Line Input #iLibre, sLinea
      ReDim Preserve sRegis(n)
      sRegis(n) = sLinea
      n=n+1
   Loop
   Close #iLibre

   For n = 0 To ubound(sRegis)
      MsgBox sRegis(n)
   Next n

End Sub


Nota: Si te gusta programar, mira aquí: BasicIDETools

Re: Problema con acentos usando Freefile

NotaPublicado: Sab Oct 24, 2015 7:39 pm
por mauricio
En Linux Mint, guarda los datos correctamente:
Código: Seleccionar todo   Expandir vistaContraer vista
> Baeza,Mauricio,Mexicana,Sat, 24-Oct-15,13:33:01,<
> Pérez,Jorge,Español,Sat, 24-Oct-15,13:33:51,<

pero al leer muestra:
foro.png
foro.png (7.26 KiB) Visto 3493 veces

¿Alguna razón especial para ese formato de registro?

Re: Problema con acentos usando Freefile

NotaPublicado: Sab Oct 24, 2015 8:26 pm
por mauricio
Con Python se escribe y lee correctamente:
foro.png

Para probar es necesario: https://github.com/UniversoLibreMexicoA ... v2.0.0.oxt
Código: Seleccionar todo   Expandir vistaContraer vista
Sub GuardarDatos()
   util = createUnoService("org.universolibre.EasyDev")   
   
   ruta = util.getPathInfo(ThisComponent.getURL())
   nueva_ruta = util.pathJoin(Array(ruta(0), "SIIlog2.txt"))

    sApell = InputBox("Apellidos? ")
    sNombr = InputBox("Nombres?")
    sNacio = InputBox("Nacionalidad?")
         
    sRegis = "> " & sApell & ","   & sNombr & "," & sNacio & "," & _
       Format(Date, "ddd, dd-mmm-yy") & "," & Format(Now, "HH:mm:ss") & ", <" & CHR(10)

   util.fileSave(nueva_ruta, "a", sRegis)

   MsgBox "Se leerá el archivo."
   
   data = util.fileOpen(nueva_ruta, "r", True)
   util.msgbox(Join(data, CHR(10)))

End Sub

Saludos

Re: Problema con acentos usando Freefile

NotaPublicado: Dom Oct 25, 2015 11:47 am
por SLV-es
Pues a mí me está funcionando perfectamente el código que entregué tanto en AOO como en LibO, W7:

Código: Seleccionar todo   Expandir vistaContraer vista
> Pérez,Raúl José,Español,dom, 25-oct-15,11:43:50,<
> Pérez,Raúl José,Español,dom, 25-oct-15,11:45:41,<


AOO
line-input-01.png
line-input-01.png (10.24 KiB) Visto 3476 veces


LIBO
line-input-libo-01.png
line-input-libo-01.png (11.54 KiB) Visto 3476 veces


Así que ni idea de porqué falla en tu distribución de Linux

Re: Problema con acentos usando Freefile

NotaPublicado: Lun Oct 26, 2015 6:31 pm
por DanielG
SLV-es:

Así con Line Input lo lee perfectamente.
Gracias por la ayuda!
PD edito el título para poner Resuelto.

Mauricio:

Aquí puse un ejemplo, donde solo se piden 3 datos. En el trabajo que estoy haciendo en realidad son 9 datos por persona y pueden llegar a ser hasta 12 personas. Además de esos datos (datos personales) también hay carga de otros datos más (aproximadamente 25 campos) y luego con todo eso se arma un escrito.
Hasta ahora lo que tenía hecho eran una serie de macros donde te van pidiendo los datos, los carga en unas variables y luego te arma el escrito, pero quería tener la posibilidad de grabarlos para de esa manera tener la opción de cargar algunos datos, luego otros y luego hacer el escrito sin tener que hacer todo de una sola vez.
Posiblemente la mejor opción hubiese sido crear una tabla, pero la verdad que llevo mucho tiempo leyendo tu libro, el de domando al escritor, starofice, ejemplos en la página de slv-es, etc y tenía que meter manos a la obra para hacer esto y de última a futuro, cuando aprenda a manejar una tabla, perfeccionarlo.

Re: [RESUELTO] Problema con acentos usando Freefile

NotaPublicado: Lun Oct 26, 2015 6:38 pm
por DanielG
Otrosi:

En el apuro por contestar me olvidé de agradecer a los autores de los libros Domando al escritor (no recuerdo al autor), Aprendiendo OO (Mauricio), Staroffice (no recuerdo el autor), como así también páginas a las que accedí para obtener valiosa información (la de SLV, me fue muy util una macro en donde hay que tildar algunas casillas de verificación, para luego que tome el texto debajo del título y arme un documento nuevo solo con el texto seleccionado)

Ahora que tengo esto más o menos controlado voy a tener que aprender como manejar tablas pero desde el Writer, porque es ese el programa que uso fundamentalmente.

Muchas gracias a todos los que desinteresadamente hay escrito tantos artículos que nos ayudan a abrir un poco los ojos.

Re: [RESUELTO] Problema con acentos usando Freefile

NotaPublicado: Lun Oct 26, 2015 6:49 pm
por SLV-es
Si no quieres meterte en tema de guardar los datos en bases de datos, quizás te resulte más interesante almacenarlos en una hoja de cálculo.

Si prefieres seguir por esta vía (archivos planos de texto) recomiendo que separes los campos por ; en lugar de por , y que no agregues los > < al final y principio, pues de esa forma, el documento TXT generado es en realidad un CSV, que puedes editar directamente con Calc o incluso con Excel.

Saludos

Re: [RESUELTO] Problema con acentos usando Freefile

NotaPublicado: Mar Oct 27, 2015 3:41 pm
por DanielG
esa es una muy buena alternativa, de hecho recuerdo haber leído algo con archivos CSV pero no se porque motivo, inconscientemente los asocié a que se trataba de archivos de contactos outook... y medio que lo pasé por arriba sin detenerme mucho en la lectura

Re: [RESUELTO] Problema con acentos usando Freefile

NotaPublicado: Mar Oct 27, 2015 3:52 pm
por mauricio
Si vas a usar CSV, considera usar EasyDev, mira que sencillo es:
Código: Seleccionar todo   Expandir vistaContraer vista
Sub ExportCSV()
   util = createUnoService("org.universolibre.EasyDev")   
   
   range = ThisComponent.CurrentSelection
   
   path = "/home/mau/test.csv"
   data = range.getDataArray()
   options = Array()

   util.exportCSV(path, data, options)
   
End Sub

Saludos