2017-09-03 35 views
-1

我必须编写一个程序,要求用户输入关键字,之后应该打开一个文本文件并向控制台写入每行包含关键字的行。在文本文件中搜索关键字

我将需要使用.Contains()方法来搜索特定字符串中的文本。被搜索的文本应作为参数传递“

我至今是:

Sub Main() 
     Console.Write("Please enter a keyword: ") 
     Dim keyword As String = Console.ReadLine() 

     Dim filePath As String = "C:\...\Projects\testing.txt" 
     Dim fileHolder As System.IO.StreamReader 
     Dim sentence As String 
     fileHolder = My.Computer.FileSystem.OpenTextFileReader(filePath) 
     sentence = fileHolder.ReadLine() 

任何提示或提示将帮助感谢

+0

看起来像功课,我^^ – Moosli

回答

2

尝试是这样的:!

Console.Write("Please enter a keyword: ") 
Dim keyword As String = Console.ReadLine() 

Dim filePath As String = "C:\a.txt" 
Dim lines() As String = System.IO.File.ReadAllLines(filePath) 
For i = 0 To lines.Length - 1 
    If lines(i).Contains(keyword) Then Console.WriteLine(lines(i)) 
Next 
Console.ReadKey() 

你也可以不用循环是这样的:

Console.Write("Please enter a keyword: ") 
Dim keyword As String = Console.ReadLine() 

Dim filePath As String = "C:\a.txt" 
Dim lines() As String = System.IO.File.ReadAllLines(filePath) 
Dim filteredLines As String = String.Join(vbNewLine, lines.Where(Function(line As String) line.Contains(keyword)).ToArray()) 
Console.WriteLine(filteredLines) 
Console.ReadKey() 

此代码还可以缩短为:

Console.Write("Please enter a keyword: ") 
Dim keyword As String = Console.ReadLine() 
Dim filteredLines As String = String.Join(vbNewLine, System.IO.File.ReadAllLines("C:\a.txt").Where(Function(line As String) line.Contains(keyword)).ToArray()) 
Console.WriteLine(filteredLines) 
Console.ReadKey() 
+0

在第一个片段,你把所有行的内存。但如果它是一个巨大的文件(如果我们幸运的话,有很多行,而不是一行中的所有内容),并且不会将所有行写入内存......太多了? 我觉得如果您每次都使用ReadLine()而不是一次读取它,那可能会更好。 – Sree