2008-11-27 10 views
1

J'utilise C# et j'essaie de lire un fichier CSV en utilisant cette chaîne de connexion;Quelle est la meilleure façon de lire les données 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" 

Cela fonctionne pour les données délimitées par des tabulations.

Je veux une chaîne de connexion qui doit être délimitée par des tabulations ainsi que par une virgule (,) et un tuyau (|).

Comment puis-je créer une chaîne de connexion générique pour CSV?

Merci Rajesh

Répondre

1

Je sais que cela ne répond pas à vos questions, mais voici un mot d'avertissement.

J'ai dû créer mon propre lecteur car vous n'obtenez pas les pilotes corrects si vous utilisez un système 64 bits.

Si votre logiciel fonctionne sur un système 64 bits, assurez-vous de le tester en premier et que les pilotes oledb ou odbc seront présents.

1

Dans le cas où vous avez besoin d'un accès séquentiel rapide au fichier CSV, le Fast CSV Reader pourrait être une option. Je l'ai utilisé sur un projet il y a quelque temps avec beaucoup de succès. Il est supposé être optimisé assez bien et fournit également une version en cache, si vous en avez besoin. De plus, il a été mis à jour plusieurs fois depuis sa sortie en 2005 (dernière mise à jour en 2008-10-09) et il prend en charge la liaison de données de base en implémentant System.Data.IDataReader.

0

Sans rouler une solution personnalisée, je ne suis pas sûr qu'il ya un moyen simple de soutenir plus d'un delimiter. This page suggère que par schema.ini vous pouvez choisir entre:

  • TabDelimited
  • CSVDelimited
  • un caractère spécifique (sauf guillemet)
  • largeur fixe
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; 
    } 
} 

puis utilisez avec:

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

et vous pouvez parcourir les lignes en utilisant:

foreach ($csv as $line) 
{ 
Questions connexes