14

私がしたいのは、テキスト ファイル内の文字列のすべてのインスタンスを検索し、その文字列を含む行全体を配列に追加することです。

例えば:

eng    GB    English
lir    LR    Liberian Creole English
mao    NZ    Maori

たとえば、eng を検索するには、最初の 2 行を配列に追加する必要があります。これには、ファイル内の 'eng' のインスタンスがさらに多く含まれます。

テキストファイル入力とC#を使用して、これを行うにはどうすればよいですか?

4

4 に答える 4

20

TextReaderを使用して各行を読み取り、検索できます。必要なものが見つかったら、その行を文字列配列に追加します。

List<string> found = new List<string>();
string line;
using(StreamReader file =  new StreamReader("c:\\test.txt"))
{
   while((line = file.ReadLine()) != null)
   {
      if(line.Contains("eng"))
      {
         found.Add(line);
      }
   }
}

yield returnまたは、列挙可能なものを返すために使用できます

于 2011-06-24T10:51:01.337 に答える
10

1 行:

using System.IO;
using System.Linq;

var result = File.ReadAllLines(@"c:\temp").Select(s => s.Contains("eng"));

または、よりメモリ効率の高いソリューションが必要な場合は、拡張メソッドをロールすることができます。FileInfoFileStreamなどをベース ハンドラとして使用できます。

public static IEnumerable<string> ReadAndFilter(this FileInfo info, Predicate<string> condition)
{
    string line;

    using (var reader = new StreamReader(info.FullName))
    {
        while ((line = reader.ReadLine()) != null)
        {
            if (condition(line))
            {
                yield return line;
            }
        }
    }
}

使用法:

var result = new FileInfo(path).ReadAndFilter(s => s.Contains("eng"));
于 2011-06-24T10:57:28.623 に答える
0

次のコードを試すことができます。試してみたところ、機能していました

string searchKeyword = "eng";
string fileName = "Some file name here";
string[] textLines = File.ReadAllLines(fileName);
List<string> results = new List<string>();

foreach (string line in textLines)
{
    if (line.Contains(searchKeyword))
    {
        results.Add(line);
    }
}
于 2011-06-24T10:57:02.487 に答える