我有两个不同的.txt文件(requested_description.txt和all_description.txt)。
在all_description.txt中我有一个字符串列表,如下所示:
all_description.txt
约翰是一名警察 迈克是一名医生 芭芭拉是一个模特 等...
在其他文件(requested_description.txt)中,我将搜索第一个文件中的名称(all_description.txt)
requested_description.txt
约翰
迈克尔
伊万
唐纳德
芭芭拉
等...
我想查找来自requested_description.txt的字符串(名称)是否在all_description.txt中相同
然后我想在输出中显示结果,例如:
John>约翰是一名警察 芭芭拉>芭芭拉是一个模特
现在我只有这种代码,我想使用排序方法,首先按升序排序,然后使用for each...
,所以我有点卡在这里:
Dim i As Integer = 0
Dim ReadAllDescrpt As String() =File.ReadAllLines("all_description.txt")
Dim RqstDescription As String()= File.ReadAllLines("rqst_description.txt")
Dim allDescrpt As New List(Of String())
allDescrpt.Sort()
For Each descrpt In ReadAllDescrpt
Console.WriteLine(ReadAllDescrpt)
Next
Console.WriteLine()
答案 0 :(得分:0)
您可以使用.Contains
来查看它们是否匹配,而不是需要对它们进行排序。匹配他们。
一个小例子,使用你的代码:
Dim ReadAllDescrpt As String() =File.ReadAllLines("all_description.txt")
Dim RqstDescription As String()= File.ReadAllLines("rqst_description.txt")
Dim allDescrpt As New List(Of String)
For Each person as string In RqstDescription
dim desc as String = ReadAllDescrpt.FirstOrDefault(Function(x)x.Contains(person))
if desc <> "" Then Console.WriteLine(person & " > " & desc)
Next
我没有对此进行测试,但这是它应该如何工作的。这也使用LINQ。 :)
答案 1 :(得分:0)
这是一个关于排序的简单示例,并逐行检查字符串数组。
Dim ReadAllDescrpt As String() = File.ReadAllLines("all_description.txt")
Dim RqstDescription As String() = File.ReadAllLines("requested_description.txt")
Array.Sort(RqstDescription)
For i As Integer = 0 To RqstDescription.Length - 1
For j As Integer = 0 To ReadAllDescrpt.Length - 1
If ReadAllDescrpt(j).Contains(RqstDescription(i)) Then
Console.WriteLine(RqstDescription(i) & " > " & ReadAllDescrpt(j))
End If
Next
Next
答案 2 :(得分:0)
更简单的LINQ,使用Join。加入rqst_description中的名称和all_description中的第一个单词。如果您最终使用名字和姓氏,则需要相应加入。
Sub Main()
Dim descriptions As String() = File.ReadAllLines("all_description.txt")
Dim names As String() = File.ReadAllLines("rqst_description.txt")
Dim result = From name In names
Join description In descriptions On name Equals _
description.Split({" is a "}, StringSplitOptions.None).First()
Select String.Format("{0} > {1}", name, description)
For Each s In result
Console.WriteLine(s)
Next
Console.ReadLine()
End Sub
根据您的评论,文件已被更改
<强> all_description.txt 强>
约翰是一名警察
迈克是一名医生
芭芭拉是模特
Ivan The Terrible是一个好人
<强> rqst_description.txt 强>
约翰史密斯
迈克尔
伊凡可怕的
唐纳德
巴巴拉
<强>输出强>
Ivan The Terrible&gt; Ivan The Terrible是个好人
芭芭拉&gt;芭芭拉是模特
注意:包含也有效,但我害怕etc...
。如果使用Contains,你可能会得到一个错误的匹配,即Jon / Jonathan is a janitor
(对于看门人没有冒犯,但Jon不是一个)。