2011-07-30 20 views
0

次のコードを使用して、.txtファイルからテキストを読み取ります。しかし、私はどのように ファイル内で検索を実行する方法と、検索に基づいてテキストファイル内の特定の行を読み取る方法がわかりません。例えば .txtファイルを読む

Dim vrDisplay = My.Computer.FileSystem.ReadAllText(CurDir() & "\keys.txt") 
    MsgBox(vrDisplay) 

私はその

感謝を行う方法を、単語「スタート」を含む行を読みたい場合。

答えて

3

代わりに、すべてのテキストを読むには、効率のために、

  • は、問題のファイルのためのFileStreamを開きます。
  • StreamReaderを作成します。
  • ループスルー。ファイルの終わりが見つかるまで、または文字列に「開始」が含まれるまで、ReadLineを呼び出します。

編集:それはあなたがメモリ内のファイル全体を維持することが必要だとしても、あなたはまだMemoryStream()を使用して上記の操作を行うことができます。

2

それが最善の解決策だ場合、あなたのポストから言うことは容易ではないが、一つの解決策は、単語Startを含むすべての行を検索しregular expressionsを使用することです:

^.*\bStart\b.*$ 

は、その行全体が一致しますどこでも完全な単語Startが含まれています。単語の一部としてStartを拒否します。たとえば、Startingは一致しません(つまり、単語境界アンカーの意味は\bです)。 VB.NETでこれを使用するには

Dim RegexObj As New Regex(
    "^  # Start of line" & chr(10) & _ 
    ".*  # Any number of characters (anything except newlines)" & chr(10) & _ 
    "\b  # Word boundary" & chr(10) & _ 
    "Start # ""Start""" & chr(10) & _ 
    "\b  # Word boundary" & chr(10) & _ 
    ".*  # Any number of characters (anything except newlines)" & chr(10) & _ 
    "$  # End of line", 
    RegexOptions.Multiline Or RegexOptions.IgnorePatternWhitespace) 
AllMatchResults = RegexObj.Matches(vrDisplay) 
If AllMatchResults.Count > 0 Then 
    ' Access individual matches using AllMatchResults.Item[] 
Else 
    ' Match attempt failed 
End If 
+0

おそらく動作しますが、組み込みのStreamReader.ReadLine()はファイル全体を含む文字列で正規表現を実行するよりも高速で、必要なメモリが少なくなります。 – Reinderien

+1

@Reinderien:まったく。しかし、おそらく彼は一度にメモリ内のファイル全体を必要とするでしょう。誰が教えてくれる? –

+0

ティムは正しいです。私はすぐにメモリ内のファイル全体を必要とします。 –