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 = ""
'(...)
答案 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()