alfonsoC3   13-08-2022, 01:32
#1
Hola, tengo el siguiente código, el detalle es en el evento click del botón (al final), ahí comparto mis dudas


Código:
' Gambas class file
Public iNumRegCatalogo As Integer

Public Sub Form_Open()

  Dim archivo As CsvFile
  Dim iregistro As Integer
  Dim cRegistrosCatalogo As New Collection
 
  'abrir archivo CSV
  archivo = New CsvFile(Application.Path & "/catalogo.csv")
 
  'meter contenido a un collection
  Do Until archivo.Eof
    cRegistrosCatalogo[archivo.Line] = archivo.Read()
    Inc iNumRegCatalogo    
  Loop
 
  ' cerrar archivo
  archivo.Close()
 
  ' agregar columnas al tableview
  TableView1.AddColumn("Descripcion", 500)
  TableView1.AddColumn("Precio", 100)
    
  'agregar un renglón al tabeview para poder introducir datos
  Inc TableView1.Rows.Count

' meter el contenido del collection al tableview
  For iregistro = 2 To iNumRegCatalogo
    
    TableView1[iregistro - 2, 0].Text = cRegistrosCatalogo[iregistro]["descripción"]
    
' la columna del precio, tienen que ir formateada con signo de pesos y alineada a la derecha
    TableView1[iregistro - 2, 1].Text = Format(cRegistrosCatalogo[iregistro]["precio distribuidor sin IVA"], GB.Currency)
    TableView1[iregistro - 2, 1].Alignment = 2
    
' siguiente registro
    Inc TableView1.Rows.Count
  Next

End


Public Sub btnSuma_Click()
 
' calcular la suma de todos los registros del tableview

  Dim iregistro As Integer
  Dim fsuma As Float
  Dim simporte As String
 
  fsuma = 0
  For iregistro = 2 To iNumRegCatalogo
    
    ' sumamos uno a uno cada registro  

    fsuma = fsuma + CFloat(TableView1[iregistro, 1].Text)  

  Next
 
' mostramos la suma
  txtSuma.Text = fsuma

End
    


El problema es que el CFLOAT, marca error, no coinciden los tipos: requerido float, obtenido string en cambio.  

Después de muchas vueltas supuse que el problema era que el contenido del TableView1[iregistro, 1].Text tenia el signo de $, y eso provocaba que el CFLOAT fallara, así que lo quite de esta forma:
   
Código:
simporte = Trim(Mid(TableView1[iregistro, 1].Text, 2, TableView1[iregistro, 1].Text.Len))
fsuma = fsuma + CFloat(simporte)
    
Pero aun así sigue marcando el mismo error, así que mi conclusión es que el problema es el FORMAT,  en lugar de poner comas (,) a los miles pone espacios en blanco  (1,234.56 lo pone 1 234.56)  y el CFLOAT no es capaz de convertirlo.
    
Revisando la instrucción format, las paginas donde lo he consultado, muestran que el resultado coloca comas, no espacios es blanco, alguien que me pueda guiar?
El contenido del tableview lo pongo con formato para la debida presentación, aquí solo pongo dos columnas, pero realmente son varias, y pues tengo que distinguir entre aquellas que representan dinero y las que solo cantidades.  
 

Anexo imagen donde el format no coloca las comas "," sino espacios en blanco.
Archivos adjuntos
HenryGuzman   13-08-2022, 17:56
#2
Hola , AlfonsoC3 . tal como mencionas .El problema es el el formato de como estan las cantidades , una solucion rapida es que elimines el simbolo $ en las cantidades y los espacios que hay en cada cantidad para ello puedes usar lo siguiente .

Donde "item" sera el campo de la tabla a la que estes apuntando .

Este te ayudara a eliminar el simbolo y los espacios de las cantidades .
Replace(Replace(item, "$", ""), " ", "")

te coloco un ejemplo aqui .

Código:
Private Function fn_SumaElementos() As Float
Dim cantidadARr As New String[] 'este seria un ejemplo de un arreglo de cantidades monetarias

'lleno el arreglo con las cantidades
cantidadARr.Add("$1 077.59")
cantidadARr.Add("$ 1 250")


Dim item As String 'me permitira obtener el elemento en la iteracion del for each
Dim suma As Float = 0.0 'suma de elementos o cantidades monetarias .

'recorro el arreglo de las cantidades monetarias con un for each .
 
For Each item In cantidadARr
  item = Replace(Replace(item, "$", ""), " ", "") 'reemplazo los simbolos y espacios que tienen cada elemento
  suma += CFloat(Trim(item)) 'convierto el string en float y a la misma vez sumo cada elemento
Next
Return suma 'salido del for each y obtengo el resultado de la suma de cada elemento ,o suma total de elementos
End
Espero que sea de ayuda .saludos
Última modificación: 15-08-2022, 18:28 por HenryGuzman.

henry15ea
tincho   13-08-2022, 17:57
#3
Hola Alfoso, bienvenido al foro.
Mira, cuando se trata de manejar cifras que están guardadas como texto ya sea en una tabla o en un archivo de texto (como el caso de tu programa) gambas no siempre responde adecuadamente, el principal problema es la localización del sistema y que función tiene la coma en el mismo.
Algunos consejos que pueden ayudarte.
  • No guardar los datos con símbolos $, € o algo por el estilo.
  • Usar la función Replace("$","") , Replace(",",".") , Replace(".",",") , Replace(" ",",") segun sea el caso.
  • Usar la función Val(sPrecio) en lugar de CFloat
Espero que te sirva de ayuda.

1 Saludo.
cogier   14-08-2022, 16:41
#4
¿Puede cargar el "catalogo.csv" en el foro, para que podamos ver lo que contiene?
jguardon   15-08-2022, 12:14
#5
Hola

Como consejo para algunos de los participantes en este hilo, os dejo un tip para que el código fuente de gambas quede perfectamente coloreado según su sintaxis:

https://gambas-es.org/showthread.php?tid=20

Estéticamente queda mucho mejor y es más fácil leerlo por todos los participantes.

Gracias

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
alfonsoC3   16-08-2022, 01:12
#6
@HenryGuzman, si, al final me di cuenta que serian los formatos los que estaban ocasionando los problemas y opte por no dar un formato como tal, si no simplemente agregar  el carácter "$" y no usar la opción de las "," para los miles, y para hacer las operaciones opte por un left para quitar el símbolo de "$', nunca pensé en el replace como opción, pero lo voy a revisar!, muchas gracias!

@tincho, si, a la mala me di cuenta, pero fijate que según yo no guardo los datos con formato al menos el los archivos, el formato solo lo quería para que se vieran "bonitos" en el tableview, pero como no quería acceder otra vez al archivo y filtrar la información para hacer la suma, decidí sacarla del tableview y pues ahí estaba el detalle jejeje, muchas gracias!

@cogier, llegando a casa lo posteo

@jguardon, gracias!, lo tomare en cuenta para la próxima duda Big Grin

--Alfonso Mtz
vuott   16-08-2022, 15:23
#7
(16-08-2022, 01:12)alfonsoC3 escribió: lo tomare en cuenta para la próxima duda

Ehmmm...  Rolleyes sería mejor si editaras tu primer mensaje de esta discusión, como jguardon sugirió, para que las partes de código sean más legibles.

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
jguardon   16-08-2022, 17:08
#8
(16-08-2022, 15:23)vuott escribió: si editaras tu primer mensaje

Ya lo he hecho yo, se ve bastante mejor así. Tongue

Saludos

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
vuott   16-08-2022, 23:45
#9
Ooooooh.... Deo gratias !

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
  
Usuarios navegando en este tema: 5 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.