elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Buscar y contar palabras en un listbox
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Buscar y contar palabras en un listbox  (Leído 7,868 veces)
rapbyone

Desconectado Desconectado

Mensajes: 173


Ver Perfil
Buscar y contar palabras en un listbox
« en: 8 Agosto 2017, 21:49 pm »

Hola amigos, una vez mas solicito su ayuda, tengo un listbox de la siguiente manera:

manzana [1]
naranja [1]
plátano [2]
sandia [2]
melón [1]
durazno [2]
guinda [1]

y necesito obtener el valor de cuantos [1] y cuantos [2] hay en la lista.
¿Se puede hacer de alguna manera?
Gracias amigos  ;-)


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Buscar y contar palabras en un listbox
« Respuesta #1 en: 8 Agosto 2017, 23:25 pm »

y necesito obtener el valor de cuantos [1] y cuantos [2] hay en la lista.

¿Cómo dices, la cantidad de "[1]" y [2]" en total?. y ¿VB6, o VB.NET?.

Simplemente puedes iterar los elementos y hacer un substring para quedarte con el número/cantidad, y entonces utilizar cualquier tipo de contenedor para ir almacenando y sumando las coincidencias de cada número/cantidad. Te muestro un ejemplo escrito en VB.NET donde utilizo la colección de tipo Dictionary:

Código
  1. Dim amountsDict As New Dictionary(Of Integer, Integer)(EqualityComparer(Of Integer).Default)
  2.  
  3. For Each item As String In Me.ListBox1.Items
  4.    Dim amount As Integer = CInt(item.Substring(item.LastIndexOf(" "c) + 1).Trim({"["c, "]"c}))
  5.  
  6.    If Not amountsDict.ContainsKey(amount) Then
  7.        amountsDict.Add(amount, 1)
  8.    Else
  9.        amountsDict(amount) += 1
  10.    End If
  11. Next item
  12.  
  13. For Each pair As KeyValuePair(Of Integer, Integer) In amountsDict
  14.    Console.WriteLine("Count of ""[{0}]"": {1} ", pair.Key, pair.Value)
  15. Next pair

Resultado de ejecución:
Citar
Count of "[1]": 4
Count of "[2]": 3

...De todas formas, ¿por que estás utilizando un ListBox para empezar?. La funcionalidad de un ListBox es representar un único elemento, sin embargo tú estás intentando representar dos cosas distintas al mismo tiempo: elemento y cantidad/número, por lo tanto deberías utilizar otro control más apropiado para representar la información de forma adyacente pero individual, como por ejemplo ListView o DataGridView.

Saludos.


« Última modificación: 8 Agosto 2017, 23:29 pm por Eleкtro » En línea

rapbyone

Desconectado Desconectado

Mensajes: 173


Ver Perfil
Re: Buscar y contar palabras en un listbox
« Respuesta #2 en: 8 Agosto 2017, 23:28 pm »

¿Cómo dices, la cantidad de "[1]" y [2]" en total?. y ¿VB6, o VB.NET?.

Amigo es para VB6,  :-(
« Última modificación: 8 Agosto 2017, 23:31 pm por Eleкtro » En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.348


Ver Perfil
Re: Buscar y contar palabras en un listbox
« Respuesta #3 en: 10 Agosto 2017, 16:25 pm »

No existe ninguna otra manera que recorrer la lsita mediante un bucle.

Código:
Recorre la lista con un bucle,
- Si el elemento acaba en "[1]" añade 1 al contador de ese tipo...
- Si el elemento acaba en "[2]" añade 1 al contador de este otro elemento...
- Si no acaba en ninguno de estos (suponiendo que tengas también algún "[0]", no haces nada, o quizás debas también sumarlo si por ejemplo acaban en "[2]"...
Fin del bucle

...que en VB6 sería más o menos:
Código
  1. Dim k as integer
  2.  
  3. For k = 0 to Listbox1.Listcount-1
  4.    If (Instrrev(Listbox1.List(k) = "[1]" then
  5.        Cuenta1 = (Cuenta1 + 1)
  6.    Elseif Instrrev(Listbox1.List(k) = "[2]" then
  7.        Cuenta2 = (Cuenta2 + 1)
  8.    End if
  9. Next
  10.  
  11. Msgbox "Cuenta de [1]: " & cstr(Cuenta1) & vbcrlf & _
  12.       "Cuenta de [2]: " & cstr(cuenta2)

Ahora, coincido con Elektro, cuandio te reclama:
Citar
La funcionalidad de un ListBox es representar un único elemento (por cada ítem), sin embargo tú estás intentando representar dos cosas distintas al mismo tiempo: elemento y cantidad/número, por lo tanto deberías utilizar otro control más apropiado
« Última modificación: 10 Agosto 2017, 16:26 pm por NEBIRE » En línea

rapbyone

Desconectado Desconectado

Mensajes: 173


Ver Perfil
Re: Buscar y contar palabras en un listbox
« Respuesta #4 en: 10 Agosto 2017, 16:44 pm »

No existe ninguna otra manera que recorrer la lsita mediante un bucle.

Código:
Recorre la lista con un bucle,
- Si el elemento acaba en "[1]" añade 1 al contador de ese tipo...
- Si el elemento acaba en "[2]" añade 1 al contador de este otro elemento...
- Si no acaba en ninguno de estos (suponiendo que tengas también algún "[0]", no haces nada, o quizás debas también sumarlo si por ejemplo acaban en "[2]"...
Fin del bucle

...que en VB6 sería más o menos:
Código
  1. Dim k as integer
  2.  
  3. For k = 0 to Listbox1.Listcount-1
  4.    If (Instrrev(Listbox1.List(k) = "[1]" then
  5.        Cuenta1 = (Cuenta1 + 1)
  6.    Elseif Instrrev(Listbox1.List(k) = "[2]" then
  7.        Cuenta2 = (Cuenta2 + 1)
  8.    End if
  9. Next
  10.  
  11. Msgbox "Cuenta de [1]: " & cstr(Cuenta1) & vbcrlf & _
  12.       "Cuenta de [2]: " & cstr(cuenta2)

Ahora, coincido con Elektro, cuandio te reclama:

Amigos, en primer lugar les agradezco por darse el tiempo de ayudarme, he aprendido de vb6 pero aún hay cosas que no entiendo del todo, si bien no es el mejor control, dadas las características de mi programa, necesito que sea de esa manera.

Intenté con el código, pero me marca un error, al parecer falta un separador de listas, intenté agregando un ")" pero me dice que "El argumento no es opcional" sobre "InStrRev".



Gracias nuevamente amigos
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.348


Ver Perfil
Re: Buscar y contar palabras en un listbox
« Respuesta #5 en: 11 Agosto 2017, 02:24 am »

claro... perdón, lo escribí rápido...

La instrucción InStrRev, exige al menos 2 parámetros obligatorios... la cadena donde se busca, y la cadena que se quiere buscar y devuelve la posición donde se localiza. 0 si no se encontró.

Lo corrijo, aunque esperaba que cualquier error de sintaxis, fueras tu mismo capaz de arreglarlo... corrijo también la falta de los parétesis de cierre...

Código
  1.    Dim k as integer
  2.  
  3.    For k = 0 to Listbox1.Listcount-1
  4.        If (Instrrev(Listbox1.List(k), "[1]")>0) then  ' (Instrrev(Listbox1.List(k) = "[1]"
  5.            Cuenta1 = (Cuenta1 + 1)
  6.        Elseif Instrrev(Listbox1.List(k),"[2]")>0) then
  7.            Cuenta2 = (Cuenta2 + 1)
  8.        End if
  9.    Next
  10.  
  11.    Msgbox "Cuenta de [1]: " & cstr(Cuenta1) & vbcrlf & _
  12.           "Cuenta de [2]: " & cstr(cuenta2)
  13.  

- Aunque estés empezando, cuando se te presenten dudas con alguna instrucción, o alguna palabra clave, llevas el puntero sobre la palabra (o la seleccionas) y usas la tecla F1, aparecerá la ayuda (si la tienes instalada), sobre dicha instrucción o palabra clave, para profundizar sobre el tema, con los detalles precisos.
- También si te canta un error puedes ir a a la ayuda para profundizar en el tema si el mensaje te resulta tan breve que no te aclara demasiado...
« Última modificación: 11 Agosto 2017, 02:26 am por NEBIRE » En línea

okik


Desconectado Desconectado

Mensajes: 462


Ver Perfil
Re: Buscar y contar palabras en un listbox
« Respuesta #6 en: 14 Agosto 2017, 13:06 pm »

A ver si te sirve esto:

Código
  1. 'Recorre los elementos de la lista en busca de valores 1 Y 2
  2. For n = 0 To List1.ListCount - 1
  3. Dim valor As Integer
  4.    valor = Mid(List1.List(n), Len(List1.List(n)) - 1, 1)
  5.    Select Case valor
  6.        Case 1: Unos = Unos + 1
  7.        Case 2: Doses = Doses + 1
  8.    End Select
  9. Next n
  10. MsgBox ("Unos: " & Unos)
  11. MsgBox ("Doses: " & Doses)
  12.  

Código:
List1.ListCount
Obtiene la longitud de la lista. Para generar un bucle que recorra el list uso "List1.ListCount - 1" porque el primer elemento de la lista tiene índice 0

Código:
List1.List(Indice)

Devuelve un elemento de la lista. Por ejemplo "manzana [1]"

Código:
valor = Mid(List1.List(n), Len(List1.List(n)) - 1, 1)
Mid es una función que obtiene un carácter o caracteres dependiendo de el lugar y longitud especificados  según los parámetros de dicha función:

Mid(String, Start As Long, [Length])

por ejemplo:

Mid("camión", 3, 2)

Devolvería "mi"

La primera posición antes de c es 1.


Código:
Len(List1.List(n))
Len devuelve la longitud de la cadena en caracteres.


De modo que :
Código:
   valor = Mid(List1.List(n), Len(List1.List(n)) - 1, 1)

Devuelve el número. que hay entre corchetes [..]


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Código contar palabras?
Scripting
.;. 1 6,083 Último mensaje 19 Enero 2009, 22:17 pm
por AlbertoBSD
Contar palabras batch
Scripting
alberto3_3 1 3,618 Último mensaje 11 Agosto 2015, 07:01 am
por santizuche
contar numero de palabras de una cola en c
Programación C/C++
ArbolEnLLamas 0 1,844 Último mensaje 11 Noviembre 2016, 17:04 pm
por ArbolEnLLamas
Contar palabras en C
Programación C/C++
andie13 2 11,159 Último mensaje 13 Noviembre 2016, 03:23 am
por Konlex
VB.NET - Contar palabras seguhn propiedad
.NET (C#, VB.NET, ASP)
dont'Exist 2 3,760 Último mensaje 14 Abril 2017, 10:38 am
por okik
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines