列表<;字符串[]>;-需要关于如何从String[]中提取记录的建议

本文关键字:提取 String 记录 gt 字符串 lt 列表 于如何 | 更新日期: 2023-09-27 18:21:38

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

使用下面的代码,我已经准备好了从文本文件到列表的集合

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

我需要查询每行的特定列。。。如果符合标准。。我需要那张唱片。。。如何使用linq完成此操作?或者其他方法?

列表<;字符串[]>;-需要关于如何从String[]中提取记录的建议

您应该使用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(',')将用逗号分隔。如果可用,Enumerable.ElementAtOrDefault(9)将重新运行第10列,否则返回null

首先将行拆分为列:

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

可以使用Where方法对条件进行筛选。

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

List<string[]> result = listOfStr
  .Where(s => s[4] == "Hello")
  .ToList();
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();

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

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);
    }
}