[SOLUCIONADO] Buscar todas las variantes de un string

Iniciado por Eleкtro, 9 Enero 2013, 01:10 AM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro

¿Alguien me puede recordar como se hacia esto?

Olvidé que método se usa para esto xD

Código (vbnet) [Seleccionar]
Dim STR = "abc"
If Cosa.Contains(STR) Then ...

' Quiero que busque todas las variantes:
' Abc
' ABc
' ABC
' aBC
' abC
' etc...









seba123neo

hay varias formas y algoritmos sobre todo recursivos, pero aca paso una bastante reducida.

Código (vbnet) [Seleccionar]
Public Class Form1

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Dim vLetras As String = "abcABC" ' Letras que se van a usar
       Dim vSize As Integer = 3 ' Longitud del resultado

       Dim vLista As IEnumerable(Of String) = vLetras.Select(Function(x) x.ToString())

       For i As Integer = 0 To vSize - 2
           vLista = vLista.SelectMany(Function(x) vLetras, Function(x, y) x + y)
       Next

       For Each t As String In vLista
           Debug.WriteLine(t)
       Next
   End Sub
End Class
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Eleкtro

#2
Gracias, pero no me aclaro, ¿Como puedo adaptarla a mis necesidades?

Tengo una "Search bar" que debe buscar resultados en los archivos de texto de "My.Resources", y mostrar cada resultado encontrado en el listview.
Lo único que quiero es hacer el texto a buscar en modo "Ignorecase" xD




Al pulsar el botón "Buscar":
Código (vbnet) [Seleccionar]
For Each Dict As DictionaryEntry In ResourceSet.OfType(Of Object)()
           If TypeOf (Dict.Value) Is String Then
               Find_Delimited_Text(My.Resources.ResourceManager.GetObject(Dict.Key), ";", TextBox_Buscar.Text)



Find_Delimited_Text sub:
Código (vbnet) [Seleccionar]
   Public Sub Find_Delimited_Text(ByVal TextFile As String, ByVal TextDelimiter As String, ByVal PatternSTR As String)

       Dim vLetras As String = PatternSTR
       Dim vSize As Integer = PatternSTR.Length  ' ¿?

       Dim vLista As IEnumerable(Of String) = vLetras.Select(Function(x) x.ToString())

       For i As Integer = 0 To vSize - 2
           vLista = vLista.SelectMany(Function(x) vLetras, Function(x, y) x + y)
       Next

       For Each t As String In vLista
           MsgBox(t)
       Next

       Dim Listview_Row_STR(4) As String
       Dim Listview_Item = New ListViewItem(Listview_Row_STR)
       Dim TextDelimited As String()
       Dim delimiter As String = TextDelimiter
       Dim fileContent As String = TextFile

       Dim stringStream As New System.IO.StringReader(fileContent)
       Using parser As New Microsoft.VisualBasic.FileIO.TextFieldParser(stringStream)
           parser.SetDelimiters(TextDelimiter)
           While Not parser.EndOfData
               TextDelimited = parser.ReadFields()
               If TextDelimited(0).Contains(PatternSTR) Then
                   field_find_number += 1
                   Listview_Row_STR(0) = field_find_number
                   Listview_Row_STR(1) = TextDelimited(0)
                   Listview_Row_STR(2) = TextDelimited(1)
                   Listview_Row_STR(3) = TextDelimited(2)
                   Listview_Item = New ListViewItem(Listview_Row_STR)
                   ListView.Items.Add(Listview_Item)
               End If
           End While
       End Using
   End Sub





EDITO:
Bueno, creo que convirtiendo los dos strings a lowercase da menos vueltas y funciona.

Código (vbnet) [Seleccionar]
If TextDelimited(0).ToLower.Contains(PatternSTR.ToLower) Then

Saludos!