2017-07-06 93 views
0

我有兩個不同的.txt文件(requested_description.txt和all_description.txt)。比較兩個不同文件中的字符串列表vb.net

在all_description.txt我有一個字符串列表,像這樣:

all_description.txt

約翰是一名警察
邁克是個醫生
真真是一個模型
etc ...

在其他文件(requested_description.txt)我會從第一個文件中搜索名稱(all_description.txt)

requested_description.txt

約翰
邁克爾
伊萬
唐納德
芭芭拉
etc ...

我想找到如果從requested_description.txt字符串(名稱)是all_description.txt

一樣,那麼我想,以顯示輸出的結果,例如:

約翰>約翰是一名警察
芭芭拉>芭芭拉是一個模型

現在我只有這種代碼,我想用那種方法,首先升序排序,然後使用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

不需要對它們進行排序,您可以使用.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。 :)

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 
+0

這對我來說很好,現在我將學習這段代碼! TNX。 – megatron1986

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

約翰是一名警察
邁克是個醫生
芭芭拉是一個模型
伊凡雷帝是個不錯的傢伙

rqst_description.txt

約翰史密斯
Micha埃爾
伊凡雷帝
唐納德
芭芭拉

輸出

伊凡雷帝>伊凡雷帝是個好人
芭芭拉>芭芭拉是一個模型

注:也包含作品,但我很害怕etc...。如果使用Contains,你可能會得到一個錯誤的匹配,即Jon/Jonathan is a janitor(門衛沒有冒犯,但Jon不是其中一個)。

+0

我嘗試使用你的解決方案,但它不工作,沒有發生。你是對的,我不能使用包含,因爲我不會得到100%的比賽。 – megatron1986

+0

'沒什麼happennd'你能解釋一點嗎? – djv

+0

結果是沒有什麼,我不能得到任何輸出結果... – megatron1986