【问题标题】:What is best way to read CSV data?读取 CSV 数据的最佳方法是什么?
【发布时间】:2010-09-24 07:12:56
【问题描述】:

我正在使用 C# 并尝试使用此连接字符串读取 CSV;

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\rajesh.yadava\Desktop\orcad;Extended  Properties="Text;HDR=YES;IMEX=1;FMT=Delimited"

这适用于制表符分隔的数据。

我想要一个连接字符串,它应该用于制表符分隔以及逗号(,)和管道(|)。

如何为CSV 创建一个通用连接字符串。

谢谢 拉杰什

【问题讨论】:

    标签: csv connection-string oledb c#-2.0


    【解决方案1】:

    filehelpers 库是一个选项吗?

    【讨论】:

      【解决方案2】:

      我知道这并不能回答你的问题,但这里有一个警告。

      我不得不创建自己的阅读器,因为如果您在 64 位系统上运行,您将无法获得正确的驱动程序。

      如果您的软件将在 64 位系统上运行,请确保您首先对其进行测试,并且将存在 oledb 或 odbc 驱动程序。

      【讨论】:

        【解决方案3】:

        如果您需要快速顺序访问 CSV 文件,Fast CSV Reader 可能是一个选项。前段时间我在一个项目中使用它并取得了巨大的成功。它应该被优化得很好,如果你需要它还提供一个缓存版本。此外,它自 2005 年首次发布以来已多次更新(最后一次更新于 2008 年 10 月 9 日),它通过实现 System.Data.IDataReader 支持基本数据绑定。

        【讨论】:

          【解决方案4】:
          【解决方案5】:

          【讨论】:

            【解决方案6】:

            如果不推出自定义解决方案,我不确定是否有一种直接的方法可以支持多个分隔符。 This page 建议通过 schema.ini 可以选择:

            • 制表符分隔
            • CSV 分隔
            • 一个特定字符(双引号除外)
            • 固定宽度

            【讨论】:

              【解决方案7】:
                  class CSVFile extends SplFileObject
              {
              
              private $keys;
              
                  public function __construct($file)
                  {
                      parent::__construct($file);
                      $this->setFlags(SplFileObject::READ_CSV);
                  }
              
                  public function rewind()
                  {
                      parent::rewind();
                      $this->keys = parent::current();
                      parent::next();
                  }
              
                  public function current()
                  {
                      return array_combine($this->keys, parent::current());
                  }
              
                  public function getKeys()
                  {
                      return $this->keys;
                  }
              }
              

              然后使用:

              $csv = new CSVFile('exmaple.csv');
              

              您可以使用以下方法遍历行:

              foreach ($csv as $line)
              {
              

              【讨论】:

                猜你喜欢
                • 2022-01-22
                • 2016-08-10
                • 2020-05-21
                • 1970-01-01
                • 2011-10-23
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-05-27
                相关资源
                最近更新 更多