Hledání v textu pomocí Contains   zodpovězená otázka

VB.NET, Algoritmy, I/O operace

Ahoj,

v mém programu si načtu .txt soubor ve kterém postupně procházím jednotlivé řádky a pokud obsahuje mnou hledaný výraz (zadaný do textboxu) tak se celý řádek přiřadí do richtextboxu. Mám ale problém při vyhledávání pomocí "Contains" s rozlišením malých a velkých písmen. Soubor totiž obsahuje výpisy chybových hlášek a něktéré jsou psány velkými písmeny, jiné malými a podobně. Do textboxu ale musím zadávat hledáná slova přesně takže pokud např. řádek obsahuje hlášku "Chyba Snímače" a já zadám "snímače" tak mi to daný řádek nenajde. Můžete se podívat na kód a poradit jak ho upravit aby bylo jedno jestli do textboxu zadám hledaný výraz velkými nebo malými.

Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        RichTextBox1.Text = ""
        Dim soubor As New IO.StreamReader("eventy1.txt")    'otevřít soubor
        Dim sb As New System.Text.StringBuilder()           'poskládání dlouhého řetězce

        While Not soubor.EndOfStream                        'číst, dokud nejsme na konci souboru

            Dim text As String = soubor.ReadLine()
            If text.Contains(TextBox1.Text) Then
                sb.AppendLine(text)
            End If
        End While


        RichTextBox1.Text = sb.ToString()
        soubor.Close()
    End Sub

...a ještě jeden malý problém mě trápi. Richtextbox mi po spuštění programu zalamuje řádky podle velikosti okna, potřeboval bych aby se řádky nezalamovaly ale objevil se dole scrollbar jako tomu je např. v klasickém notepadu (myslel jsem že by to mohla vyřešit vlastnost scrollbars=both ale asi se pletu)

Děkuji za odpověďi.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

1.)

           If text.ToLower().Contains(TextBox1.Text.ToLower()) Then
                sb.AppendLine(text)
            End If

2.) Vlastnost WordWrap

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky vyřešilo vše co jsem potřeboval

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Používat ToLower k hledání bez ohledu na velikost písmen je sice možné, ale není to efektivní (ToLower vytváří zbytečně kopii stringu se zmenšenými písmeny; pokud tedy bude string dlouhý, je to zbytečné mrhání výkonem i pamětí; u krátkých textů je to jedno).

Doporučuji zvyknout si na text.IndexOf(TextBox1.Text, StringComparison.OrdinalIgnoreCase) >= 0. Škoda, že funkce Contains toto přetížení nemá, hodilo by se. Stejně se dají porovnávat i celé stringy, opět stačí přidat parametr StringComparison.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback