Smazat text s listboxu ,který obsahuje slova – Visual Basic – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Smazat text s listboxu ,který obsahuje slova – Visual Basic – Fórum – Programujte.comSmazat text s listboxu ,který obsahuje slova – Visual Basic – Fórum – Programujte.com

 
Hledat
Moderní platforma pro vytvoření vašeho nového webu – Wix.com.
Nyní už můžete mít web zdarma.
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Laser Game Ostrava

krpik0
Newbie
9. 9. 2019   #1
-
0
-

Zdravím

potřebuji aplikaci která smaže věty s listboxu které začínají <!-- a končí -->

např.

<!-- komentář k podmínce

komentař pokračuje

komentař končí -- >

aplikace vyhledá a smaže tedy všechny tři řádky

můj kod co mam zatím

Dim items As New List(Of String)
        Dim nalezslovo As Boolean

        Dim A As String() = {"<!--"}
        Dim B As String() = {"-->"}

        For i As Integer = 0 To ListBox1.Items.Count - 1


            For Each slovo As String In A

(zde nevím jak dostadit aby aplikace vyhledala také znaky pod B)


                nalezslovo = False

                If ListBox1.Items(i).ToString.Contains(slovo) Then
                    nalezslovo = True
                    Exit For
                End If

            Next

            If nalezslovo = False Then items.Add(ListBox1.Items(i))

        Next


        ListBox1.Items.Clear()
        ListBox1.Items.AddRange(items.ToArray)

aplikace nyní dělá že vyhledá pouze <!-- a smaže jen první větu,potřeboval bych dosadit podmíku pro --> aby aplikace vyhledala větu začinajíci <!-- a končíci -->

Děkuji za odpovědi

Nahlásit jako SPAM
IP: 46.174.58.–
gna
~ Anonymní uživatel
925 příspěvků
9. 9. 2019   #2
-
0
-

   

Dim items = {"AA","<!-- BB -->","CC","<!-- DD","DD","DD -->","EE"}
Dim fixed As New List(Of String)
Dim skip As Boolean = False
For Each item As String In items
    If item.StartsWith("<!--") Then skip =True
    If Not Skip Then fixed.Add(item)
    If item.EndsWith("-->") Then skip = False
Next
Dim data = "AA<!-- BB -->CC<!-- DD -->EE"
Dim fixed = Regex.Replace(data, "<!-- .*? -->", "", RegexOptions.Singleline)
Nahlásit jako SPAM
IP: 213.211.51.–
krpik0
Newbie
9. 9. 2019   #3
-
0
-

Napadlo mě na button

For i As Integer = 0 To ListBox1.Items.Count - 1
            Dim Text As String = Convert.ToString(ListBox1.Items(i))
            Text = Regex.Replace(ListBox1.Items(i), "<!--[^\-]+-->", "")

            ListBox1.Items(i) = Text

Požit Regex ale tohle mě vymaže pouze řádek

pokud bude text

<!-- aaaaa

aaaa

aaaa --> 

tak ho už nesmaže pouze první řádek

Nahlásit jako SPAM
IP: 46.174.58.–
gna
~ Anonymní uživatel
925 příspěvků
10. 9. 2019   #4
-
0
-

Protože každá Item je jen jeden řádek. Takže můžeš použít to procházení s pamatováním stavu, nebo to nahrazení udělej na kompletním textu. Nějak nevidím důvod proč zobrazovat soubor v listboxu.

Nahlásit jako SPAM
IP: 213.211.51.–
krpik0
Newbie
10. 9. 2019   #5
-
0
-

#4 gna
no napadlo mě že to bude lepší když si tlačítkem načtu text do listobu ,dalším tlačítkem uložím upraveny text v listoboxu a třetí tlačítko nechám na upravu textu

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim openfile = New OpenFileDialog() With {.Filter = "Text (*.php)|*.php"}
        If (openfile.ShowDialog() = System.Windows.Forms.DialogResult.OK) Then
            For Each line As String In File.ReadAllLines(openfile.FileName)
                ListBox1.Items.Add(line)
            Next
        End If

    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        ' SAVE DIALOG
        Dim SaveFileDialog1 As New SaveFileDialog
        SaveFileDialog1.FileName = ""
        SaveFileDialog1.Filter = "Text Files (*.php)|*.php|All Files (*.*)|*.*"

        If SaveFileDialog1.ShowDialog() = DialogResult.OK Then
            Dim sb As New System.Text.StringBuilder()

            For Each o As Object In ListBox1.Items
                sb.AppendLine(o)
            Next

            System.IO.File.WriteAllText(SaveFileDialog1.FileName, sb.ToString())
        End If
    End Sub

------------------------------

tak a třetí button který v listboxu smazné ty danné texty co obsahuji znaky

a bud to udělam s pomoci Regexu což ale není účinné pro více řádku

  Dim IndexInteger As Integer = ListBox1.SelectedIndex
        Dim Results =
            (
                From T In ListBox1.Items
                Select System.Text.RegularExpressions.Regex.Replace(CStr(T), "<!--(.|\s)*?-->", "")
            ).ToArray

        ListBox1.Items.Clear()
        ListBox1.Items.AddRange(Results)

        If IndexInteger <> -1 Then
            ListBox1.SelectedIndex = IndexInteger
        End If

nebo

přes indexy ale to nevím jak na to
int start = input.IndexOf("<--");

int end = input.IndexOf("-->");
 

Nahlásit jako SPAM
IP: 46.174.58.–
MilanL+1
Věrný člen
10. 9. 2019   #6
-
0
-

#5 krpik
ahoj,

je třeba to ošetřit při načítání, hrubý postup:

1) nenačítat rovnou do boxu, ale nejdříve do řetězcové proměnné

2) otestovat na "<!-" nastavit si příznak začátku na ANO  (číslo nebo TRUE/FALSE)

3) otestovat příznak začátku 

  - když NE vložit do Listboxu

  - když ANO otestova na konec "-->" , po nalezení příznak začátku NE

použít pro každou načítanou položku.

lze použít i pro více požadovaných formátů vynechání.

případně lze použít i na části vět před komentářem (do listboxu od začátku po nalezený index "<!-" nebo za komentářem od index "-->" + 3 kde 3 je délka toho hledaného do konce.

funkcí je více záleží na prostředí zda je to MS OFFICE, nebo NET, existují např i hledací funkce od konce

Nahlásit jako SPAM
IP: 91.139.9.–
MilanL+1
Věrný člen
10. 9. 2019   #7
-
0
-

#5 krpik
ahoj,

je třeba to ošetřit při načítání, hrubý postup:

1) nenačítat rovnou do boxu, ale nejdříve do řetězcové proměnné 

2) otestovat na "<!-" nastavit si příznak začátku na ANO  (číslo nebo TRUE/FALSE)

3) otestovat příznak začátku 

  - když NE vložit do Listboxu

  - když ANO otestova na konec "-->" , po nalezení příznak začátku NE

použít pro každou načítanou položku.

lze použít i pro více požadovaných formátů vynechání.

případně lze použít i na části vět před komentářem (do listboxu od začátku po nalezený index "<!-" nebo za komentářem od index "-->" + 3 kde 3 je délka toho hledaného do konce.

funkcí je více záleží na prostředí zda je to MS OFFICE, nebo NET, existují např i hledací funkce od konce

Pokud bys ty komentáře chtěl odstranit až na stisk tlačítka, můžeš načíst vše do LB a tu vynechávací část aplikovat na listbox, ale pozor při odstraňování z Listboxu je třeba brát v úvahu snížení counteru a potřebu otestovat stejný index (řádky se posunou jakoby nahoru tzn na smazaném indexu v listu se objeví následující položka). 

Pokud bys chtěl, aby se na stisk tlačítka ty komentáře, když jsou vidět smazaly a když nejsou vidět  zobrazily, tak načíst soubor do LISTU a do Listboxu pak bud přenos celého Listu, nebo cyklem dle postupu výše bez komentářů.

Nahlásit jako SPAM
IP: 91.139.9.–
krpik0
Newbie
10. 9. 2019   #8
-
0
-

#7 MilanL
děkuji za odpověd

možná mě napadlo že by ty html komentaře mohl už mazat ve visualku přes Find Replace ale pokud je to na více řadu

<!-- koment

koment

koment -->

tak je to to stejné

Nahlásit jako SPAM
IP: 46.174.58.–
MilanL+1
Věrný člen
12. 9. 2019   #9
-
0
-

#8 krpik
proto tam mám ten příznak začátku, aby to bylo schopné otestovat i víceřádkové komentáře, jen je třeba to použít i na tu řádku se začátkem.

tzn. ta podmínka 2) na test začátku komentáře je uzavřená 

nějak takhle by mohl být řešen ten cyklus při načítání řádek ze souboru:

dim komentar as boolean

komentar = false

For Each line As String In File.ReadAllLines(openfile.FileName)

	if not line.indexof("<!-") = -1 then
		komentar = True
	end if

	if komentar then
		if not line.indexof("-->") = -1 then
			komentar = False
		end if
	else
                ListBox1.Items.Add(line)
	end if

Next

ve 3. pak testuješ tu samou řádku na příznak konce a jsou třeba obsloužit obě větve then i else

Nahlásit jako SPAM
IP: 91.139.9.–
Seth
~ Anonymní uživatel
3 příspěvky
13. 9. 2019   #10
-
0
-

udělej to obráceně - uprav soubor před načtením do ListBoxu

  Private Sub RemoveRem(ByVal fName As String, ByVal lstBox As ListBox)
    Dim fix() As String
    Dim strR As New System.IO.StreamReader(fName)
    Dim txt As String = strR.ReadToEnd
    strR.Close()
    txt = System.Text.RegularExpressions.Regex.Replace(txt, "<!--[^\-]+-->", "")
    fix = Split(txt, vbCrLf)
    lstBox.Items.Clear()
    For i As Integer = 0 To fix.Length - 1
      If Trim(fix(i)) <> "" Then lstBox.Items.Add(fix(i))
    Next
  End Sub

a z OpenFileDialog při OK zavoláš

RemoveRem(tvuj_openfiledialog.FileName, tvuj_ListBox)
Nahlásit jako SPAM
IP: 37.44.18.–
MilanL+1
Věrný člen
13. 9. 2019   #11
-
0
-

#10 Seth
taky možnost, ale jestli je to student a má to do školy, tak nevím jestli už brali Regulární výrazy a použití, Navíc ta zřetězená konstrukce může začátečníka zmást. Já to většinou beru algoritmicky, v podstatě ta zřetězená funkce s regulárním výrazem dělá v podstatě téměř to samé, hm zajímalo by mě srovnání rychlostí těch našich 2 algoritmů.

Nahlásit jako SPAM
IP: 91.139.9.–
Seth
~ Anonymní uživatel
3 příspěvky
Včera   #12
-
0
-

#11 MilanL
Chápu, dal jsem jen řešení :) 

pokud má základy tak zvládne jak mé tak tvé řešení

Nahlásit jako SPAM
IP: 90.176.147.–
Zjistit počet nových příspěvků

Přidej příspěvek

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032019 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý