List <string []> - 需要有关如何从String [] </string []>中提取记录的建议

时间:2013-07-08 22:14:18

标签: c# linq

我有一个包含1000行的文本文件(每行大约30列),需要根据某些条件拉出所需的行。

使用下面的代码我已经将文本文件中的集合准备好进入List

string[] records = File.ReadAllLines(path);
List<string> listOfStr = new List<string>(records);

我需要查询每一行的特定列...如果匹配条件...我需要该记录... 我怎么能用linq做到这一点?还是其他方法?

4 个答案:

答案 0 :(得分:6)

你应该使用File.ReadLines而不是首先将所有内容加载到内存中。此外,您将在此处创建两个内存中集合:

string[] records = File.ReadAllLines(path);
List<string> listOfStr = new List<string>(records);

这在内存消耗方面更有效:

var matchingLines = File.ReadLines(path)
    .Select(l => new{ Parts = l.Split(), Line = l })
    .Where(x => x.Parts.ElementAtOrDefault(9) == yourSearch)
    .Select(x => x.Line);

foreach (string line in matchingLines)
     Console.WriteLine(line);

你没有提到分隔符分隔每个列,我使用了空格,l.Split(',')将用逗号分隔。 <{1}}如果可用,则返回第10列,否则返回Enumerable.ElementAtOrDefault(9)

答案 1 :(得分:0)

首先将行拆分为列:

List<string[]> listOfStr = records.Select(s => s.Split('\t')).ToList();

您可以使用Where方法过滤条件。

例如,这会过滤掉第五列为"Hello"的所有行:

List<string[]> result = listOfStr
  .Where(s => s[4] == "Hello")
  .ToList();

答案 2 :(得分:0)

如果行以逗号分隔,请尝试此操作:

int indexCol = 0; //the index of the col you want to look into
string search = string.Empty; //what you want to search in the column

string lineResult = listOfStr.FirstOfDefault(x=> x.split(",")[indexCol].Contains(search));

其他

string search = string.Empty;

foreach (string line in listOfSrt)
{
    string[] inCols = line.Split("\t");

    if (inCols[0].Contains(search))
    {
     Console.WriteLine(line);
    }
}

答案 3 :(得分:0)

string[] records = File.ReadAllLines(path);
List<string> listOfStr = new List<string>(records);
List<string> listOfMatches = listOfStr.Where(str => str[YOUR TEST COLUMN].Equals([YOUR TEST VALUE])).ToList();