2016-08-13 54 views
0

即時通訊目前正在制定一項計劃,basicly寫了一些文件和它們的路徑到一個文件&一個新的路徑成另一臺電腦用來放這些文件在它的硬盤上。 我不知道如何通過第二臺計算機正確讀取文件。 (該節目的「接收部分」)VB讀行從文件開始以「XY」,而忽略了XY

應讀文件看起來是這樣的:

OTHER STUFF 
MORE STUFF 
EVEN MORE STUFF 
File1:~\\bar\foo.txt 
Path1:~C:\foo 
File2:~\\bar\foobar.txt 
Path2:~C:\foobar 
OTHER STUFF 
MORE STUFF 
EVEN MORE STUFF 

我怎樣才能讀取這個文件,並只獲得文件和路徑,並排除「文件」和「路徑」?

對不起,如果我的英文不完美,請詢問是否不清楚。 我希望你能幫助我。

問候

這是我得到了這麼遠,但它只會之後155顯示一個字符(我用的,隨着現在一個分隔符)

Dim settings_file As String = "//test/test.txt" 
Dim stream_reader As New StreamReader(settings_file) 
Dim line As String 
line = stream_reader.ReadLine() 
Do While Not (line Is Nothing) 
    If line.StartsWith("File") Then 
     Dim parts As String() = line.Split("~") 
     For Each part In parts 
      MsgBox(part(1)) 
     Next 
    End If 
    line = stream_reader.ReadLine() 
Loop 
stream_reader.Close() 
+0

你所要的輸出如:http://pastebin.com/raw/nq6zzX58 – BanForFun

+0

不應該是這樣的http:/ /pastebin.com/n3nNSEfu – Alex

回答

1
Dim lines = File.ReadLines("test\test.txt") 

Dim paths = From line In lines 
      Where line Like "File#:~*" OrElse line Like "Path#:~*" 
      Select Split(line, ":~", 2).Last 

Dim result = paths.ToArray 

Dim lines = File.ReadLines("test\test.txt") 

Dim lookup = lines.ToLookup(Function(l) If(Len(l) < 4, l, Mid(l, 1, 4)), Function(l) Split(l, ":~", 2).Last) 

Dim files = lookup("File").ToArray 
Dim paths = lookup("Path").ToArray 

.ToLookup的擴展將組由所述第一功能的物品,並且所述第二功能是選擇存儲每個組中的項目。所以,如果你遍歷lookup按鍵和項目看起來像這樣

"OTHE" 
    "OTHER STUFF" 
    "OTHER STUFF" 
"MORE" 
    "MORE STUFF" 
    "MORE STUFF" 
"EVEN" 
    "EVEN MORE STUFF " 
    "EVEN MORE STUFF" 
"File" 
    "\\bar\foo.txt" 
    "\\bar\foobar.txt" 
"Path" 
    "C:\foo" 
    "C:\foobar" 
+0

謝謝,這完全按照需要工作。 (我只是需要把文件和路徑在不同的陣列更容易讀出來) – Alex

+0

@Alex你可以嘗試的選擇,如果所有線路都超過4個字符。 – Slai

+0

哇,這很有趣,爲什麼它必須是4個字符btw?如果你介意用Loopkup函數解釋你在那裏做了什麼。問候 – Alex

1

它得到如果拆分將更方便您的問題分成較小的部分:

  1. 閱讀文件(File.ReadAllLines)。

  2. 遍歷行(For Each)。

  3. 對於每一行,檢查它是否與你正在尋找(String.StartsWith)的前綴開頭。

  4. 如果是這樣,請將空格上的行分開(String.Split)並僅檢索第二部分((1))。

將實施留作練習; .NET庫方法名稱應該足以讓你開始。如果您遇到困難,請隨時返回並詢問更具體的問題。

+0

感謝您的幫助,我堅持與String.Split表達,我不知道如何得到它的工作,以及如何剛剛獲得的第二部分。我完全是VB的新手。 – Alex

+0

我得到它的工作,但我只能讓它給我delsim後的第一個字符。 – Alex

+0

@Alex:代替For Each循環,簡單地使用'份(1)'。 – Heinzi