2008-11-27 2 views
1

Я использую C# и пытаюсь прочитать CSV, используя эту строку соединения;Что лучше всего читать 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.

Благодаря Раджеш

ответ

1

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

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

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

1

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

0

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

  • TabDelimited
  • CSVDelimited
  • один конкретный символ (за исключением двойных кавычек)
  • фиксированной ширины
0
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) 
{ 
Смежные вопросы