在第一个Regex.match上退出循环并执行其他操作

时间:2013-01-09 11:22:44

标签: asp.net vb.net vb.net-2010

我正在构建一个包含文本集的Web应用程序。

例如。

玛雅文明 - TextSet1

由于该地区的高度互动和文化传播,玛雅文明与其他中美洲文明有许多共同特征。写作,金石和日历等进步并非源于玛雅人;

Maya影响力 - TextSet2

然而,他们的文明充分发展了它们。从洪都拉斯,伯利兹,危地马拉和萨尔瓦多西部可以发现玛雅人的影响,远离墨西哥中部,距离玛雅地区超过1000公里(620英里)。玛雅艺术和建筑中存在许多外部影响,这些影响被认为是贸易和文化交流的结果,而不是直接的外部征服。

问题

每个 TextSet 都有一个唯一索引,因为它们存储在Gridview中。我通过首先将第一个项GridView存储在字符串中来遍历TextSet1中的每个项目或索引。

然后,另一个For loop循环遍历该字符串,以便count单词Maya有多少匹配。

For Each item As GridViewRow In Me.GridViewSearchResult.Rows
        Dim txtStr as Label = DirectCast(item.FindControl("TextSet1"), Label) 
        Dim Str = txtStr.Text.toString 

    For i as Integer = 0 to Str.Length - 1

    Dim count As new Integer 
    count = Regex.Matches (Str, "Maya", RegexOptions.IgnoreCase).Count

    Next
 Next

我想要实现的是,在开始时,程序首先处理TextSet1Str,然后使用count计算单词{{1}的出现次数在Maya中。在Str中第一次出现Maya时,将整个集存储在数据库中,然后退出或停止循环。这意味着该程序不会移动到Str。我想在循环外执行检查然后调用值,但TextSet2Str内声明。还尝试在循环外部执行For loop,但我需要的是在当前循环中的Regex.match中第一次出现单词maya时停止循环。有关如何实现这一目标的任何建议或想法?

2 个答案:

答案 0 :(得分:0)

实施了与第一个类似的新For循环,并有一个while循环,用于检查count是否不是nothing,如果true { {1}},然后使用Insert to database退出For loop

答案 1 :(得分:-1)

根据您给出的示例以及您对问题的描述,我建议您的问题很多。我建议你最好的办法是找一个好的软件开发人员,可以坐在你旁边,通过它来讨论你,而不是在这里提问。

但是,在Visual Basic中退出for循环的关键字是“Exit For”,但这只会打破最内层的循环。要打破所有嵌套循环,需要更复杂的东西。

这个问题应该给你一些指示:Breaking/exit nested for in vb.net

对代码示例的一些评论:

For Each item As GridViewRow In Me.GridViewSearchResult.Rows ' Ok
    Dim txtStr as Label = DirectCast(item.FindControl("TextSet1"), Label) ' Ok

    Dim Str = txtStr.Text.toString ' it would be better to declare the type of Str and leave out the .toString. Dim Str as String = txtStr.Text    

    For i as Integer = 0 to Str.Length - 1 ' For every character in the string, why?   
                                           ' Note where is i used within the loop?

    Dim count As new Integer ' Declared afresh for every itteration of the 
                             ' loop and then not used. Probably not what is wanted.

    count = Regex.Matches (Str, "Maya", RegexOptions.IgnoreCase).Count ' Seems ok, but why repeat multiple times?

    ' Neither count nor i have been used.
    Next
 Next

建议的解决方案:

For Each item As GridViewRow In Me.GridViewSearchResult.Rows
    Dim txtStr as Label = DirectCast(item.FindControl("TextSet1"), Label)
    Dim Str as String = txtStr.Text    
    Dim count As new Integer = Regex.Matches(Str, "Maya", RegexOptions.IgnoreCase).Count
    If count > 0 then 
       Call StoreInDb(count, str)
       Exit For
    End If
 Next