2015-04-08 3 views
0

J'essaie de lire un fichier .csv Excel délimité par des tabulations. Il y a huit colonnes avec des données mixtes dans chacune. Je posterais une photo de la sortie mais je n'ai pas assez de réputation pour le faire (ceci est mon premier post, alors supportez-moi). Essentiellement, la table de sortie dt ne contient qu'une seule colonne avec un en-tête de colonne de charabia.C# - Problème lors de la lecture d'un fichier délimité par des tabulations à l'aide de Microsoft Jet OLEDB

Voici le code que je utilise:

De App.config:

<add key="cnProvider" value="Microsoft.Jet.OLEDB.4.0"/> 
<add key="cnProperties" value="&quot;text;HDR=Yes;FMT=TabDelimited;CharacterSet=65001&quot;"/> 

De Program.cs:

string sqlStatement_1 = ConfigurationSettings.AppSettings["sqlStatement_1"]; 
string cnProperties = ConfigurationSettings.AppSettings["cnProperties"]; 
string cnStr = "Provider=" + cnProvider + ";Data Source=" + folder + ";Extended Properties=" + cnProperties + ";"; 

OleDbDataAdapter Adp; 
Adp = new OleDbDataAdapter(sqlStatement_1, cnStr); 
using (Adp) { 
Adp.Fill(dt); 
} 

Ce code a bien fonctionné sur un fichier délimité par des virgules lors de la modification de FMT en Delimited au lieu de TabDelimited. Des idées? La taille du fichier est inférieure à 1000 lignes, donc la vitesse d'exécution n'est pas une grosse affaire. Le code ne produit aucune exception.

Merci d'avance!

+0

ici est un bon site que vous devriez regarder en ce qui concerne la façon de configurer une chaîne de connexion à l'aide OLEDB [C# ConnectionStrings] (http://www.connectionstrings.com/microsoft-jet-ole-db- 4-0 /) s'il vous plaît suivez ces étapes et je suis tout à fait sûr que vous reconnaîtrez rapidement où vous vous êtes trompé .. également faire une recherche google sur comment utiliser la méthode 'Fill' et comment utiliser' using() {} 'déclaration également vous devez modifier votre question d'origine et montrer où dans le fichier app.Config vous avez défini les paramètres de ce' ConfigurationSettings.AppSettings ["sqlStatement_1"]; ' – MethodMan

+0

obtenez-vous des exceptions, si oui pouvez-vous modifier le question avec ceux-ci. – BMac

+0

Il n'est pas nécessaire de construire dynamiquement le 'cnStr' dans votre code lorsque vous pouvez ajouter toutes les propriétés nécessaires dans le paramètre du fichier app.config .. regardez le lien de la chaîne de connexion que j'ai mentionné dans mon précédent commentaire – MethodMan

Répondre

2

Je n'ai pas réussi à faire fonctionner le pilote JET - je suppose qu'il y a quelque chose de non standard dans mon fichier .csv. Mais de toute façon, c'est ma solution, qui fonctionne très bien. Merci encore à tous ceux qui ont répondu.

public static DataTable readCSV() 
    { 
     //create a data table and add the column's 
     DataTable table = new DataTable("table_name"); 
     int i = 0; 
     table.Columns.Add("city", typeof(String)); 
     table.Columns.Add("owner", typeof(String)); 
     table.Columns.Add("unit_number", typeof(String)); 
     table.Columns.Add("equipment_desc", typeof(String)); 
     table.Columns.Add("wo_type", typeof(String)); 
     table.Columns.Add("wo_number", typeof(String)); 
     table.Columns.Add("wo_desc", typeof(String)); 
     table.Columns.Add("wo_status", typeof(String)); 
     table.Columns.Add("days_oos", typeof(String)); 

     //start reading the textfile 
     StreamReader reader = new StreamReader(@"c:\...\...csv"); 
     string line; 
     while ((line = reader.ReadLine()) != null) 
     { 
      if (i == 0) 
      { 
       //skip headings 
      } 
      else 
      { 
       string[] items = line.Split('\t'); 
       //make sure it has 3 items 
       if (items.Length == 9) 
       { 
        DataRow row = table.NewRow(); 
        row["city"] = items[0]; 
        row["owner"] = items[1]; 
        row["unit_number"] = items[2]; 
        row["equipment_desc"] = items[3]; 
        row["wo_type"] = items[4]; 
        row["wo_number"] = items[5]; 
        row["wo_desc"] = items[6]; 
        row["wo_status"] = items[7]; 
        row["days_oos"] = items[8]; 
        table.Rows.Add(row); 
       } 
      } 
      i++; 
     } 
     reader.Close(); 
     reader.Dispose(); 

     // make use of the table 
     return table; 
    } 
+0

Peut-être pas la plus jolie des réponses mais ça m'a aidé. J'essayais JET et ACE pour lire un fichier csv avec un user960914