【问题标题】:how to use csvHelper to read the second line in a csv file如何使用 csvHelper 读取 csv 文件中的第二行
【发布时间】:2014-09-20 18:00:42
【问题描述】:

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

第二行是数值,由,分隔的36个数值

我想看第二行,发现大家都在说csvHelper package,所以我下载了,但是没有dll添加到我的项目中。

我的问题是如何包含它以及如何阅读第二行。

我知道我可以使用Install-Package CsvHelper 安装它,但我不希望这样,因为我想在服务器上部署这个应用程序。因此,如果有类似add reference 之类的方法,我更愿意。

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

  1. 加载 csv 文件
  2. 阅读第一行并忽略它。
  3. 阅读第二行并将其拆分为,

【问题讨论】:

  • 您可以使用StreamReader.ReadLine() 跳过第一行。
  • “我知道我可以使用Install-Package CsvHelper 安装它,但我不想那样,因为我想在服务器上部署这个应用程序”你到底在说什么?您不能将项目部署到使用 nuget 包管理器的服务器吗?我们几乎每天都这样做。
  • @TimSchmelter 我不知道,因为我不擅长 c#。但是,感谢您向我提及。另外,我的问题不在于读取 csv 文件,我的问题在于包含该库,我在 Google 中搜索了很多,但找不到任何对我有帮助的东西。
  • Install-Package 确实添加了引用。还有一些幕后的包裹簿记。你仍然有一个可以部署的普通项目。
  • @spender 我的意思是我不想告诉那个客户他需要解雇这个声明Instal-Package CsvHelper。它是一个 Windows 应用程序。所以我需要拥有服务器 bty 的客户只需双击应用程序并运行应用程序。我希望你能得到我,如果我写了一些非常愚蠢的东西,我很抱歉。我不是一个好的开发者。

标签: c# csv csvhelper


【解决方案1】:

您可以使用TextReader.ReadLine() 跳过第一行:

using (TextReader reader = File.OpenText("filename"))
{
    reader.ReadLine();
    // now initialize the CsvReader
    var parser = new CsvReader( reader ); // ...
}

【讨论】:

  • 感谢您的回答。我有大约 200 个 csv 文件。所以,我认为 csvHelper 有办法阅读它们。对吗?
  • @AgnieszkaPolec:我不熟悉那个解析器,所以我查看了文档。 joshclose.github.io/CsvHelper 但我认为无论如何它都会有所帮助。另外,一旦你知道如何解析一个文件,我就不明白解析 200 个文件的难度。
  • 感谢您的更新,我正在尝试安装该软件包。然后我会测试你的代码并更新你。为您与我的努力 +1。
  • 在您的代码中,您将第一行(即标题)传递给了 csv 阅读器,对吗?
  • @AgnieszkaPolec:正如文档所述,TextReader.ReadLine 读取并返回下一行,然后将阅读器推进到下一行。我对那条线什么都不做,因为我只想跳过这条线。然后我将阅读器传递给CsvReader 的构造函数,它现在将解析除第一行之外的所有行。
【解决方案2】:

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

CsvConfiguration configuration = new CsvConfiguration { HasHeaderRecord = true };

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

这是Documentation的sn-p

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

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

【讨论】:

  • 如果已经默认为真,为什么还要设置为真?
  • 我很早以前就回答过这个问题了,可能当时不是默认值。另一方面,问题是明确询问这一点,这意味着由于某种原因它不起作用(可能是因为它是库的旧版本)。最后一个人如何搜索这个问题这意味着他有问题并且他需要解决方案,这可以帮助他
猜你喜欢
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
  • 2015-05-07
  • 1970-01-01
  • 1970-01-01
  • 2019-05-03
相关资源
最近更新 更多