如何使用csvHelper读取csv文件中的第二行?

11

我有一个csv文件,有两行数据,第一行是包含36列的标题行,由,分隔

第二行是36个值,用,分隔开来。

我想要读取第二行,发现大家都在谈论CsvHelper软件包,于是我下载了它,但它没有任何dll可添加到我的项目中。

我的问题是如何将其包含在项目中以及如何读取第二行。

我知道可以使用Install-Package CsvHelper 来安装它,但我不想这样做,因为我想在服务器上部署此应用程序。因此,我更喜欢类似于 add reference 的方式。

如果我知道如何包含它,读取第二行就不难了。 我会这样操作:

  1. 加载csv文件
  2. 读取第一行并忽略它。
  3. 读取第二行并通过,分割它。

1
你可以使用 StreamReader.ReadLine() 来跳过第一行。 - Tim Schmelter
3
我知道可以使用 Install-Package CsvHelper 命令来安装它,但我不想这样做,因为我想在服务器上部署此应用程序。你在说什么?难道不能将使用NuGet包管理器的项目部署到服务器上吗?我们几乎每天都这样做。 - spender
@TimSchmelter 我不知道这个,因为我不擅长C#。不过,谢谢你告诉我。此外,我的问题不在于读取CSV文件,而是在于包含那个库,我在Google上搜索了很多但没有找到对我有帮助的东西。 - Agnieszka Polec
1
Install-Package确实会添加一个引用。并且在幕后进行一些包管理工作。你仍然可以部署一个正常的项目。 - Joey
@AgnieszkaPolec 看起来不错,已成功添加。现在构建你的应用程序,转到 bin\debug 文件夹,你会发现多了一个额外的 dll,可能是 CsvHelper.dll。在部署时,你需要将该 dll 与你的 exe 一起复制。 - Sriram Sakthivel
显示剩余5条评论
2个回答

22
你可以使用TextReader.ReadLine()跳过第一行:
using (TextReader reader = File.OpenText("filename"))
{
    reader.ReadLine();
    // now initialize the CsvReader
    var parser = new CsvReader( reader ); // ...
}

谢谢你的回答。我有大约200个csv文件。所以,我想csvHelper有一种方法可以读取它们全部。对吗? - Agnieszka Polec
@AgnieszkaPolec:我对那个解析器不太熟悉,所以我查看了文档。http://joshclose.github.io/CsvHelper/ 但是我认为它无论如何都会有帮助。另外,一旦你知道如何解析一个文件,我不明白为什么解析200个文件会有困难。 - Tim Schmelter
谢谢你的更新,我正在尝试安装那个包。然后我会测试你的代码并更新你。感谢你和我一起努力。 - Agnieszka Polec
在你的代码中,你把第一行也就是表头传递给了CSV读取器,对吧? - Agnieszka Polec
正如文档所述TextReader.ReadLine读取并返回下一行,然后将阅读器推进到下一行。我不对该行执行任何操作,因为我只想跳过此行。然后,我将阅读器传递给CsvReader的构造函数,现在它将解析除第一行以外的所有行。 - Tim Schmelter

14

被接受的答案是该问题的一种解决方法,但库已经为这种常见情况提供了一流的解决方案
CsvConfiguration 类有一个属性HasHeaderRecord,可以将其设置为true,这将导致库跳过文件中的第一行。

CsvConfiguration configuration = new CsvConfiguration { HasHeaderRecord = true };

using (TextReader sr = new StringReader(fileContent))
{
    CsvReader reader = new CsvReader(sr, configuration);
}

这是文档的一部分:

获取或设置一个值,该值指示CSV文件是否具有标题记录。默认值为true。

更新: 在较新版本的库中,类CsvConfiguration已重命名为Configuration


1
如果它已经默认为true,为什么您要将其设置为true呢? - Ali
我很久以前回答了这个问题,也许在那时,它不是默认值。另一方面,该问题明确要求有关此事的信息,这意味着由于某些原因它没有起作用(可能是因为使用了旧版本的库)。最后,对于需要解决此问题的人来说,这意味着他们遇到了问题并且需要解决方案,这可能会对他们有所帮助。 - Hakan Fıstık

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接