行包含IF问题

时间:2018-05-18 18:48:47

标签: .net vb.net

 For Each removeword In RichTextBox1.Lines
     If Not removeword = "" Then

         For Each line In LoadedLines.Lines
             If line.Contains(removeword) Then

                 RichTextBox2.Visible = True
                 LoadedLines.Visible = False

                 RichTextBox2.Text = RichTextBox2.Text + vbNewLine + line
             End If
          Next
     End If
 Next

这是我的代码。

我有LoadedLines RichTextBox(它包含要编辑的字符串)。

RichTextBox1包含字符串,它会检查一行是否包含其中一个字符串。

问题:

如果我这样运行,我会在RichTextBox2中获得包含其中一个删除词的所有行。

但是,如果我用:

运行它
If Not line.Contains(removeword)

它没有将其他行添加到RichTextBox2,它只删除了一些removeword行(非常令人困惑)。

已尝试过许多其他方法,例如将其存储在数组中,然后写入RichTextBox2,但它不起作用。

覆盖LoadedLines RichTextBox不起作用;例如当我这样做的时候:

If line.Contains(removeword) Then
    line = ""
    '(...)

2 个答案:

答案 0 :(得分:2)

所以你有一个单词列表(让他们说他们是:Able,Baker,Charlie& Dog)包含在richTextBox1中

所以我们知道我们在初始运行中总是循环4次

然后我们将遍历所有加载的行:

当我们发现其中一个包含removeword时,我们将其添加到另一个richtextbox。

现在让我们以不包含

的方式来看待这个问题

Loop1(Able)
我们添加了所有不包含的行 Loop2(贝克)
我们添加了不包含baker的所有行(包括那个包含Able的行,因为此迭代正在寻找Baker)
Loop3(查理)
继续这个过程。

因此,通过使用Not,并且因为您没有从LoadedLines中删除任何行,您需要多次添加每一行。如果当前迭代包含removeword,那么您唯一不会这样做。

答案 1 :(得分:0)

您可以使用临时#merglist.py student_id = [] grade = [] file1 = open("file1.txt") file2 = open("file2.txt") f1 = file1.readlines() for line in f1: student_id.append(line.split('|')) f2 = file2.readlines() for line in f2: grade.append(line.split('|')) for g in grade: for s in student_id: if g[0]==s[0]: newline = g[0] + " " + s[2].strip("\n") + ", " + s[1] + " "+ g[1].strip("\n") print newline | => python2 mergelists.py 2 Tucker, Stacey 26 6 Patel, Ram 17 9 Singh, Naved 30 4 Mirza, Simi 31 7 Pruth, Joe 35 来存储比较结果,然后验证是否已在临时列表中插入一行,并仅在之前未选择新行时添加新行。 />

这样的事情:

List(Of String)

如果它是有意的,这里有一个可能的Dim LinesList As List(Of String) = New List(Of String) For Each line As String In LoadedLines.Lines If line.Length > 0 Then For Each removeword As String In RichTextBox1.Lines If (removeword.Length > 0) AndAlso Not (LinesList.Contains(line)) Then If line.Contains(removeword) Then LinesList.Add(line) End If End If Next End If Next 替代品:

LINQ

使用布尔选择器使用Dim LinesList As List(Of String) = RichTextBox1.Lines.Where(Function(RemovedWord) RemovedWord.Length > 0). SelectMany(Function(RemovedWord) Return LoadedLines.Lines. Where(Function(ln) ln.Length > 0 AndAlso ln.Contains(RemovedWord)) End Function).ToList() LINQ方法返回包含要删除的单词的行列表或不包含任何行的行:

Except()

如果您需要从Dim ContainsRemovedWords As Boolean = True If LinesList.Count > 0 Then RichTextBox2.Visible = True LoadedLines.Visible = False If ContainsRemovedWords Then RichTextBox2.AppendText(String.Join(Environment.NewLine, LinesList.Select(Function(ln) ln))) Else RichTextBox2.AppendText(String.Join(Environment.NewLine, LoadedLines.Lines.Except(LinesList))) End If End If 列表中删除空行,可以添加Except()过滤条件:

Where()