Gb.util.CsvFile


Objetivo: Gb.util.CsvFile
Hola amigos, entre los componentes de gambas existe uno gb.util que incluye una clase, CsvFile que yo uso para la lectura de ficheros csv. Funciona de miedo sobre todo para mi programa que lee lecturas de contador de electricidad (CUPS, potencia, consumo de activa, reactiva, etc) y son un montón.
El caso es que lo he querido usar para escribir mis propios ficheros y como tiene un método .Create lo he intentado usar, no obstante me dice la ayuda que este funciona a partir de la version 3.15 y que casualidad que tengo la 3.14.3
Instalé desde los repositorios gambas-team/gambas3 y la última versión como se ve en la screenshot es esa.
Para cuando se podrá actualizar? Alguien sabe?
Mi alternativa es crearme un módulo que inicie un fichero con las cabeceras que yo le diga y grabe un String[] con los datos para cada línea, pero esperaba ahorrármelo.

ppagambas

Gracias

Perfil MP  
Objetivo: Re: Gb.util.CsvFile
Hola ahtonio:

Alternativa:
Puedes "bichear" la clase CsvFile, dentro del ficheo gb.util de la version 3.15, copiar su código y crear en tu proyecto una nueva clase "CsvFIleLaMia" y usarla en tu proyecto. Es posible que funcione.

Saludos

Julio

Objetivo: Re: Gb.util.CsvFile
Hola Antonio, mira te dejo un método que uso yo para leer y escribir CSV
Antes de nada, que sepas que con File.load(archivo.csv) ya cargas el contenido de un archivo de texto en una variable de tipo texto. Dicho esto este método que uso hace una lista de los renglónes de un archivo y devuelve una matriz de texto.
Public Function FileLoad(strPath As String, Optional bolBL As Boolean) As String[] ''Devuelve una matriz de texto donde cada ítem es un renglón del archivo de texto. Si el renglón esta vacio en el archivo de texto, es decir se trata de unallinea vacia, esta no se pasa a la martiz, por lo tanto el resultado es un retorno sin lineas en blanco.

Dim strList As String
Dim stxListTmp As New String[]
Dim stxList As New String[]
Dim intList As Integer

stxList.Clear

If Exist(strPath) Then

strList = File.Load(strPath)

If InStr(strList, "\n") > -1 Then
stxListTmp = Split(strList, "\n")
Else
If String.Len(strList) > 0 Then
stxListTmp.Add(strList)
Endif
Endif

For intList = 0 To stxListTmp.Max
Select bolBL
Case False
If stxListTmp[intList] <> "" Then
stxList.Add(stxListTmp[intList])
Endif
Case Else
stxList.Add(stxListTmp[intList])
End Select
Next
Endif

Return stxList

End

Luego recorres esta variable usando split() para separar según sea el caso de comas, tabuladores espacios etc.
Bien ya tienes la lectura .
La escritura de un CSV se hace, partiendo de una matriz de texto.
File.Save("/ruta/archivo.csv", data.Join(","))

Listo eso es todo, no es necesario gambas 3.15 para operar con CSV
Espero te sea de utilidad
Saludos.

Perfil MP  
Objetivo: Re: Gb.util.CsvFile
Muchisimas gracias.

Muy interesante el planteamiento Tincho.

Como quiero implementar con la misma clase cuando salga la versión 3.15, me he "fabricado" un módulo (no una clase propiamente dicha) que hace lo que hará el método create y que cuando abro un fichero para escritura, ya carga los campos (la primera línea).
Lo dejo aquí por si alguien puede interesarle.

' gambas module file

'
' Modulo diseñado para crear y grabar líneas a un fichero csv
' hasta que en la versión gb.util.csvFile 3.15 habilite el metodo
' Create y Write
'

Private fields As String[] ' Nombres de los campos (Heading)
Private fichero As File ' Fichero csv que se abrirá
Private separador As String


Public Sub create(hfile As String, sfields As String[], Optional sep As String = ";")

Dim ok As Integer
Dim i As Integer = 0
Dim linea As String

' Por defecto si no se cambia los campos los separamos por ;
separador = sep

If Exist(hfile) Then
ok = Message.Warning("El fichero " & hfile & " ya existe\nDesea reemplazarlo?", "Si", "No")

If ok = 2 Then Return ' Cancela la operacion
Endif

' Si llega aquí no existe el fichero o lo queremos reemplazar

Try fichero = Open hfile For Create
If Error Then
Message.Error("Al crear el fichero " & hfile & "\nse ha producido el ERROR\n " & Error.Text)
Return
Endif

' El fichero existe y está abierto para escritura
' grabamos cabeceras con los campos recibidos
fields = sfields
For i = 0 To fields.Max
linea &= LCase(fields[i])

If i < fields.Count - 1 Then
linea &= separador
Endif

Next
' Construida la linea, la escribimos
Print #fichero, linea
' Lo dejamos abierto porque
' entiendo que se ha creado para escribir en él
Return

End

Public Sub Open(hfile As String, Optional sep As String = ";")

Dim ok As Integer
Dim linea As String

' El fichero debe de existir
separador = sep
If Not Exist(hfile) Then
ok = Message.Error("El fichero " & hfile & "\nno existe. Debe de usar el método create")
Return
Endif
' El fichero existe
' Vamos a leer la cabecera de los campos
fichero = Open hfile For Input
Line Input #fichero, linea
fields = Split(linea, ";")
' Rescatados los campos cerramos y abrimos para añadir lineas
fichero.Close
fichero = Open hfile For Append

End

Public Sub Write(regs As String[])

Dim campo As String
Dim linea As String
Dim i As Integer = 0

For i = 0 To regs.Max
linea &= regs[i]
If i < regs.Max Then
linea &= separador
Endif
Next
Print #fichero, linea

End


Public Sub Close()
' Siempre cerrar el fichero despues de usar
fichero.Close

End

Public Function getFields() As String[]
' Recuperar los campos que usa el fichero csv
Return fields

End


Como verás no compruebo que el string[] que recibe el metodo write sea correcto porque es para uso interno y debería saber que mando, no obstante se puede mejorar.
Para salir del paso me ha servido.

Muchas gracias

última edición por ahtonio el Domingo, 05 Abril 2020, 19:46; editado 1 vez
Perfil MP  

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 8.482s (PHP: -96% SQL: 196%)
Consultas SQL: 45 - Debug off - GZIP Activado