C#在文件中从CSV中查找数据
本文关键字:查找 数据 CSV 文件 | 更新日期: 2023-09-27 18:30:02
我有一行值作为CSV文件,我需要找出它们中的每一个是否都存在于另一个文件中(即XML)。
我已经读取了CSV数据,拆分了值,搜索代码有效,但输出了错误的结果("查找"不存在的值)我愿意帮忙。感谢Shabi
我的代码
string csvFile = @"Afile.csv";
string[] lines = System.IO.File.ReadAllLines(csvFile);
string namesValues = lines[0];
List<string> allValidNamesValues = namesValues.Split(',').ToList();
bool result = false;
string DeviceName = Phone.Tag("Name").Value();
if (allValidNamesValues.Any(vn => DeviceName.IndexOf(vn, StringComparison.OrdinalIgnoreCase) != -1))
{
Info = string.Format("The Device is supported");
return true;
}
return result;
我猜这里的主要问题是您只处理文件的第一行(lines[0]
)。可以使用嵌套循环处理所有行,也可以使用SelectMany
(LINQ)。例如(使用ReadLines
来避免一次缓冲所有数据):
static readonly char[] comma = { ',' };
...
if(File.ReadLines(csvFile).SelectMany(x => x.Split(comma)).Any(
vn => DeviceName.IndexOf(vn, StringComparison.OrdinalIgnoreCase) != -1))
{
// whatever
}
注意,我不相信字符串测试是正确的(对我来说,有vn.IndexOf(DeviceName, ...)
似乎更明显,但:如果没有例子,很难检查
要对CSV进行更正确的解析更为复杂;您应该考虑像LumenWorksCsvReader 这样的库
我建议你真的想要这样的东西:
- 测试CSV的第一列
- 跳过CSV标题(第1行)
的实现
string DeviceName = Phone.Tag("Name").Value();
string csvFile = @"Afile.csv";
var result = File
.ReadLines(csvFile) // You have no need to read all the lines
.Skip(1) // skip title, comment out this if CSV has no caption
.Select(line => line.Split(',')) // providing that CSV doen't have quotations
.Select(items => items[0]) // providing that 1ast column contains names
.Any(name => String.Equals(name, DeviceName, StringComparison.OrdinalIgnoreCase));