2016-08-13 51 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