C#のテキストファイルで単語を検索するときに問題が発生します。
コンソールに入力された単語を見つけて、その単語が見つかった行全体をinコンソールに表示したい。
私のテキストファイルには、
Stephen Haren、December、9,4055551235
Laura Clausing、January、23,4054447788
William Connor、December、13,123456789
Kara Marie、October、23,1593574862
Audrey Carrit、January、16,1684527548
Sebastian Baker、October、23,9184569876
したがって、「12月」と入力すると、「Stephen Haren、December、9,4055551235」と「William Connor、12,13,123456789」が表示されます。
部分文字列の使用を考えましたが、もっと簡単な方法が必要だと思いました。
回答後の私のコード:
using System;
using System.IO;
class ReadFriendRecords
{
public static void Main()
{
//the path of the file
FileStream inFile = new FileStream(@"H:\C#\Chapter.14\FriendInfo.txt", FileMode.Open, FileAccess.Read);
StreamReader reader = new StreamReader(inFile);
string record;
string input;
Console.Write("Enter Friend's Birth Month >> ");
input = Console.ReadLine();
try
{
//the program reads the record and displays it on the screen
record = reader.ReadLine();
while (record != null)
{
if (record.Contains(input))
{
Console.WriteLine(record);
}
record = reader.ReadLine();
}
}
finally
{
//after the record is done being read, the progam closes
reader.Close();
inFile.Close();
}
Console.ReadLine();
}
}
すべての行(StreamReader、File.ReadAllLinesなど)を反復処理し、line.Contains("December")
かどうかを確認します(「12月」をユーザー入力に置き換えます)。
編集:ファイルが大きい場合は、StreamReaderを使用します。また、大文字と小文字を区別しないために、containsの代わりに@Matias CiceroのIndexOf-Exampleを使用します。
Console.Write("Keyword: ");
var keyword = Console.ReadLine() ?? "";
using (var sr = new StreamReader("")) {
while (!sr.EndOfStream) {
var line = sr.ReadLine();
if (String.IsNullOrEmpty(line)) continue;
if (line.IndexOf(keyword, StringComparison.CurrentCultureIgnoreCase) >= 0) {
Console.WriteLine(line);
}
}
}
このようなものはどうですか:
//We read all the lines from the file
IEnumerable<string> lines = File.ReadAllLines("your_file.txt");
//We read the input from the user
Console.Write("Enter the Word to search: ");
string input = Console.ReadLine().Trim();
//We identify the matches. If the input is empty, then we return no matches at all
IEnumerable<string> matches = !String.IsNullOrEmpty(input)
? lines.Where(line => line.IndexOf(input, StringComparison.OrdinalIgnoreCase) >= 0)
: Enumerable.Empty<string>();
//If there are matches, we output them. If there are not, we show an informative message
Console.WriteLine(matches.Any()
? String.Format("Matches:\n> {0}", String.Join("\n> ", matches))
: "There were no matches");
このアプローチはシンプルで読みやすく、 [〜#〜] linq [〜#〜] と String.IndexOf を使用します String.Contains の代わりに、大文字と小文字を区別しない検索を実行できます。
@Rinecamoの指示に従って、次のコードを試してください。
string toSearch = Console.ReadLine().Trim();
このコードラインでは、ユーザー入力を読み取り、それを1行に格納してから、各行に対して繰り返すことができます。
foreach (string line in System.IO.File.ReadAllLines(FILEPATH))
{
if(line.Contains(toSearch))
Console.WriteLine(line);
}
FILEPATH
を絶対パスまたは相対パスに置き換えます。 「。\ file2Read.txt」。
ファイル内のテキストを検索するには、このアルゴリズムを使用できます。
static void Main(string[] args)
{
}
これを試して
StreamReader oReader;
if (File.Exists(@"C:\TextFile.txt"))
{
Console.WriteLine("Enter a Word to search");
string cSearforSomething = Console.ReadLine().Trim();
oReader = new StreamReader(@"C:\TextFile.txt");
string cColl = oReader.ReadToEnd();
string cCriteria = @"\b"+cSearforSomething+@"\b";
System.Text.RegularExpressions.Regex oRegex = new
System.Text.RegularExpressions.Regex(cCriteria,RegexOptions.IgnoreCase);
int count = oRegex.Matches(cColl).Count;
Console.WriteLine(count.ToString());
}
Console.ReadLine();