Как лучше всего читать данные CSV? - PullRequest
1 голос
/ 27 ноября 2008

Я использую 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"

Это работает для данных, разделенных табуляцией.

Я хочу строку подключения, которая должна быть разделена символом табуляции, а также запятой (,) и pipe (|).

Как создать общую строку подключения для CSV.

Спасибо Раджеш

Ответы [ 7 ]

2 голосов
/ 27 ноября 2008

Является ли библиотека filehelpers опцией?

1 голос
/ 27 ноября 2008

В случае, если вам нужен быстрый последовательный доступ к CSV-файлу, можно выбрать Fast CSV Reader . Я использовал это в проекте некоторое время назад с большим успехом. Предполагается, что он достаточно хорошо оптимизирован, а также предоставляет кэшированную версию, если вам это нужно. Кроме того, он несколько раз обновлялся с момента выпуска в 2005 году (последнее обновление 2008-10-09) и поддерживает базовую привязку данных путем реализации System.Data.IDataReader.

.
1 голос
/ 27 ноября 2008

Я знаю, что это не отвечает на ваши вопросы, но вот слово предупреждения.

Мне пришлось создать свой собственный ридер, так как вы не получаете правильные драйверы, если вы когда-либо работали в 64-битной системе.

Если ваше программное обеспечение когда-либо будет работать в 64-битной системе, сначала проверьте его и убедитесь, что драйверы oledb или odbc будут присутствовать.

0 голосов
/ 17 июня 2013
    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)
{
0 голосов
/ 14 марта 2009

Без применения нестандартного решения я не уверен, что существует простой способ поддержки более чем одного разделителя. Эта страница предполагает, что через schema.ini вы можете выбирать между:

  • TabDelimited
  • CSVDelimited
  • один конкретный символ (кроме двойной кавычки)
  • фиксированная ширина
0 голосов
/ 28 ноября 2008

Является ли использование класса TextFieldParser параметром?

http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser.aspx

0 голосов
/ 27 ноября 2008
...