列表<;字符串[]>;-需要关于如何从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完成此操作?或者其他方法?
您应该使用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);
}
}