比较两个不同文件vb.net中的字符串列表

时间:2017-07-06 16:09:40

标签: string vb.net list

我有两个不同的.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()

3 个答案:

答案 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不是一个)。