【问题标题】:How to perform a text search on a column inside a CSV file with C#?如何使用 C# 对 CSV 文件中的列执行文本搜索?
【发布时间】:2020-09-10 19:25:51
【问题描述】:

我正在尝试对 CSV 文件中的列执行搜索,但我终其一生都无法找出最佳方法。我对 C# 很陌生,所以我发现的大多数东西都很复杂。

CSV文件有“id”、“title”和“rating”三栏,我想通过title栏搜索。

我发现了一个建议,我应该将 CSV 转换为一个列表,然后搜索它。

这是我目前将文件转换为列表的代码:

var reader = new StreamReader(File.OpenRead(@"books.csv"));
            List<string> listA = new List<string>();
            List<string> listB = new List<string>();
            while (!reader.EndOfStream)
            {
                var line = reader.ReadLine();
                var values = line.Split(';');

                listA.Add(values[0]);
                listB.Add(values[1]);

                foreach (var column1 in listA)
                {
                    Console.WriteLine(column1);
                }

                foreach (var column2 in listA)
                {
                    Console.WriteLine(column2);
                }
            }

但我不明白它是如何工作的,我得到一个错误

索引超出了数组的范围

谁能指出我正确的方向,因为我很迷茫?

【问题讨论】:

  • 您可能正在寻找 'using var sr = new StreamReader(fileName);字符串内容 = sr.ReadToEnd();'反而。但是......最好的解决方案真的取决于几件事。文件有多大?您是否会在一次执行代码期间执行多次搜索(在这种情况下,将源数据缓存在内存中确实会更好)。数据将如何使用?您是否需要正在搜索的条目的所有数据(id、标题、评级)?
  • 您可以使用 CsvHelper 读取文件。从那时起,我认为您可以弄清楚其余部分。
  • 我正在为一个学校项目做这个,所以数据并不是很复杂。 CSV Helper 非常有用,非常感谢。

标签: c# list csv search


【解决方案1】:

如果您使用StreamReader,则无需调用File.OpenRead(因为StreamReader 可以处理此问题,它会改变数据的编码)。

您正在读取 csv(逗号分隔值)文件,但您正在使用分号进行拆分。 (您可以通过在记事本中打开 csv 文件来检查)。

你也做了一个拆分,但你不检查是否有 2 个项目。所以 values[1] 可以抛出 Index was outside the bounds of the array 错误。

作为起点尝试:

var listA = new List<string>();
var listB = new List<string>();

using (var reader = new StreamReader(@"books.csv"))
{
    while (!reader.EndOfStream)
    {
        var line = reader.ReadLine();
        if (!string.IsNullOrEmpty(line))
        {
            var values = line.Split(',');

            if (values.Length > 1)
            {
                listA.Add(values[0]);
                listB.Add(values[1]);
            }
        }
    }
}

根据 cmets。编写代码的更好方法是使用第三方包,例如 CSV Helper (https://joshclose.github.io/CsvHelper)。

【讨论】:

  • 嗨,格雷格。我终于能够加载数据并通过它进行搜索,CSV Helper 确实很有帮助。非常感谢您的帮助。
猜你喜欢
  • 2012-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-07
  • 1970-01-01
  • 2011-07-10
  • 2017-09-16
  • 2018-11-22
相关资源
最近更新 更多