Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: VB Vyhledat a smazat řádky dle zadaných znaků

Aktivity
Avatar
Radim Krpec
Člen
Avatar
Radim Krpec:5.9.2019 23:04

Ahoj

Nejde mě vymyslet kód kod který z listboxu vyhledá věty které začínají a končí danými znaky a ty se vymažou a uloží se

Zkusil jsem: Dim items As New List(Of String)

Dim wordFound As Boolean

Dim Bword As String() = {"<!--"} - určené znaky které aplikace vyhledá dále smazné
---- zde bych potřeboval kod , který vyhledá znaký ->> musí být spojená s řádkem co vyhledá znaky <!-- tak aby aplikace vyhledala větu co začíná a končí definovanými znaky

For i As Integer = 0 To ListBox1.Item­s.Count - 1

For Each Word As String In Bword

wordFound = False 'Před zaškrtnutím další položky v seznamu vždy resetujte na False

If ListBox1.Item­s(i).ToString­.Contains(Wor­d) Then

wordFound = True

Exit For
End If
Next
If wordFound = False Then items.Add(Lis­tBox1.Items(i))
Next
'Proses mazání

ListBox1.Item­s.Clear()

ListBox1.Item­s.AddRange(item­s.ToArray)

Chci docílit: Potřebuji aplikaci která v textu vyhledá větu která začíná a končí danými znaky např.
<!-- zde bude text
druhý řádek
třetí řádek -->
po stisknutí button se vyhledají řádky dle definovaných znaků a vymažou se

 
Odpovědět
5.9.2019 23:04
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:6.9.2019 7:59

Moc nerozumim, co a proc chces udelat? Co ten kod bude na konec delat? Pokud ma najit a smazat text, je na to funkce replace.
https://docs.microsoft.com/…ings.replace?…
Pokud pracujes s listboxem, tak bych mel uplney seznam v nejake promenne a generoval obsah listboxu podle podminek z tohoto seznamu.

googlem jsem nasel treba tohle
https://www.dreamincode.net/…stbox-items/
"Http%$$" --> "Http://"

Public Sub ListboxReplace(ByRef lb As ListBox)
 If lb.Items.Count = 0 Then Exit Sub
 For i As Integer = 0 To lb.Items.Count - 1
  ListBox1.Items(i) = System.Text.RegularExpressions.Regex.Replace(ListBox1.Items(i), "Http%\$\$" , "Http://")
 Next
End Sub

Pokud jde o mazani, tak nevim, jak se chova VB, ale vetsina jazyku muze mit problem s tim, ze mu smazes polozku a pak precisluje pole.

cyklus (0 az 3) {if (podminka) smaz(i)}
0 1 2 3 -> i==1 -> precisluje indexy 0 1 2, ale cyklus ti jede stale do 0 az 3!

Takze je lepsi cyklus pocitat od konce, nebo vysledek prepisovat do noveho pole

cyklus (3 az 0 nebo exist) {if (podminka) smaz(i)}
cyklus (0 az 3) {if (podminka==false) {pole[j] = item[i]; j++}}
 
Nahoru Odpovědět
6.9.2019 7:59
Avatar
Radim Krpec
Člen
Avatar
Odpovídá na Peter Mlich
Radim Krpec:6.9.2019 11:33

Děkuji
S funkci replace by to šlo.
Cíl je vyhledat dane znaky a vymazat co obsahují za text.


kod
kod
<!-- zde bude poznamka
druhý řádek
třetí řádek -->
kod
kod
kod
<!-- zde bude poznamka
druhý řádek
třetí řádek -->


po kliknutí na button

kod
kod

kod
kod
kod
..........
tedy funkce bude obsahovat znaky <!-- a --> a mezi těmito znaky smaže text vč. znaků
že v textu zůstanou potom mezeri vůbec nevadí

 
Nahoru Odpovědět
6.9.2019 11:33
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:6.9.2019 11:38

ten regularni vyraz by mohl byt (pokud se VB nelisi od jinych)
\<\!\-\-.*?\-\-\>
. jakykoliv znak
<!--
* opakovani 0 a nekonecno
? opakuj, dokud nenarazis na tuto kombinaci...
-->
viz regexp.cz
A navic by tam mohl byt modifikator m jako multiline

Editováno 6.9.2019 11:39
 
Nahoru Odpovědět
6.9.2019 11:38
Avatar
Radim Krpec
Člen
Avatar
Radim Krpec:8.9.2019 15:30

ještě mě napadlo to vyhledat právě podle indexu
moc mě to ale nefunguje

for (int n = listBox1.Item­s.Count - 1; n> = 0; --n)
{
string s = listBox1.Items [n] .ToString ();
{
int start = n. IndexOf ("<!-");
int end = n.IndexOf ("->");
{
listBox1.Item­s.Remove (s);

 
Nahoru Odpovědět
8.9.2019 15:30
Avatar
Radim Krpec
Člen
Avatar
Odpovídá na Radim Krpec
Radim Krpec:8.9.2019 15:35

to jsem ještě psal i do C# ve visualu by to bylo podobně

int start = n. IndexOf ("<!-")
int end = n.IndexOf ("->")
stringem načtu list box a podmínkou potom napsat aby v listoboxu se vyledal text který má <!- a -> na konci dát listBox1.Item­s.Remove

 
Nahoru Odpovědět
8.9.2019 15:35
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.