2017-01-17 8 views
0

次のコードをインポートするとExcelドキュメントが解析され、データベースに保存される前にデータを操作できるようになります。C#でCSVファイルを読み取る

私はちょうど罰金の.xlsxと.XLSファイルを解析することができますが、私はのために働いている顧客は、特殊文字を受け入れるための.csvファイルタイプを使用したいの.csvファイルのための私の既存のコードを使用する方法

を把握することはできません。

OpenFileDialog opener = new OpenFileDialog(); 
opener.Filter = "Excel Files| *.xlsx;*.xls;*.csv;"; 
if (opener.ShowDialog() == DialogResult.Cancel) 
    return; 

FileStream streamer = new FileStream(opener.FileName, FileMode.Open); 
IExcelDataReader reader; 
if (Path.GetExtension(opener.FileName) == ".xls") 
{ 
    reader = ExcelReaderFactory.CreateBinaryReader(streamer); 
} 
else if (Path.GetExtension(opener.FileName) == ".csv") 
{ 

    *** Need Something Here to read CSV Files that will work with 
     the rest of code*** 
} 
else 
{ 
    reader = ExcelReaderFactory.CreateOpenXmlReader(streamer); 
} 
DataSet results = reader.AsDataSet(); 
results.Tables[0].Rows[0].Delete(); 
results.AcceptChanges(); 


foreach (System.Data.DataTable table in results.Tables) 
{ 
    foreach (DataRow dr in table.Rows) 
    { 
     >>> Do Something With the Data 
    } 
} 
+0

かなり簡単、ファイルを開き、行ずつ、それを読めば、 'csv'ファイルを読み込みます。特殊文字はどういう意味ですか? – JohnG

+0

JohnG - これは正しいライブラリがありますが、ネイティブではありません。あなたが '.Split( '、')'を意味するならば、それは防弾から遠いです。 Visual Basicのパーサーを意味するならば、実際には行単位で読むのではありません(引用されたCSVフィールドなどの中には戻り値があります)。 – Hambone

答えて

0
 private void ReadCSVFile(string filepath) 
    { 
     //receiverList = new List<ReceiverUser>(); 

     try 
     { 
      if (filepath == string.Empty) 
       return; 

      using (StreamReader sr = new StreamReader(FileUpload1.PostedFile.InputStream)) 
      { 
       string line; 

       while ((line = sr.ReadLine()) != null) 
       { 
        SplitLine(line); 
       } 
      } 

      #region row add test 
      DataTable dt = new DataTable(); 

      if (dt.Columns.Count == 0) 
      { 
       dt.Columns.Add("Name", typeof(string)); 
       dt.Columns.Add("Mail", typeof(string)); 
       dt.Columns.Add("Amount", typeof(double)); 
      } 

      DataRow NewRow; 

/* foreachの(receiverListにおけるVAR項目) {NewRow = dt.NewRow()。 NewRow [0] = item.Name + "" + item.Surname; NewRow [1] = item.Mail; NewRow [2] = item.Amount; dt.Rows.Add(NewRow); */

  grdRec.DataSource = dt; 
      grdRec.DataBind(); 

      #endregion 
     } 
     catch (Exception) 
     { 

     } 

    }//end of function 

}この関数は、データテーブルとしてのグリッドのデータテーブルと設定データソースに、負荷パラメータをCSVファイルを読み込みます。これはASP.NETのWebfoRMコードです。

+0

あなたはどこにリストを追加していますか?私はかなりC#の新機能です。 –

+0

はい、私はそのセクションをコメントアウトしました。ちょうどすべてのコードをコピーしてください – onur

+0

私はそれが既にrecieverListにあるものを介してループすると思った。 –

0

IExcelDataReaderは、Excelファイル(かなり安全な賭け)を読み込み、ネイティブにCSV(その部分はわかりません)を処理しないサードパーティのパッケージであると仮定すると、CSVを完全に個別に処理できます。

OLEにはすてきなCSVリーダーがあるので、このようなものはうまくいくはずです。

List<DataTable> tables = new List<DataTable>(); 

if (Path.GetExtension(opener.FileName) == ".csv") 
{ 
    OleDbConnection conn = new OleDbConnection(string.Format(
     @"Provider=Microsoft.Jet.OleDb.4.0; Data Source={0};" + 
     "Extended Properties=\"Text;HDR=YES;FMT=Delimited\"", 
     opener.FileName 
    )); 
    conn.Open(); 

    string sql = string.Format("select * from [{0}]", Path.GetFileName(opener.FileName)); 
    OleDbCommand cmd = new OleDbCommand(sql, conn); 
    OleDbDataReader reader = cmd.ExecuteReader(); 

    DataTable dt = new DataTable(); 
    dt.Load(reader); 
    tables.Add(dt); 

    reader.Close(); 
} 
else 
{ 
    FileStream streamer = new FileStream(opener.FileName, FileMode.Open); 
    IExcelDataReader reader = null; 
    if (Path.GetExtension(opener.FileName) == ".xls") 
     reader = ExcelReaderFactory.CreateBinaryReader(streamer); 
    else 
     reader = ExcelReaderFactory.CreateOpenXmlReader(streamer); 
    DataSet results = reader.AsDataSet(); 
    results.Tables[0].Rows[0].Delete(); 
    results.AcceptChanges(); 

    foreach (DataTable table in results.Tables) 
     tables.Add(table); 
} 

そして、それは今でローカルIExcelReaderにスコープのようにだけではなく、Results.Tables,のDataTableの(tables)のローカルのリストを参照します。

foreach (System.Data.DataTable table in tables) 
{ 
    foreach (DataRow dr in table.Rows) 
    { 
     >>> Do Something With the Data 
    } 
} 

何らかの理由でOLEを使用できない場合、.NETクラスライブラリには実際にCSVパーサーがあります。これはかなりよく私の意見では、隠されたが、それはうれしいですです:

http://odedcoster.com/blog/2012/03/28/did-you-know-a-net-csv-parser-that-comes-with-visual-studio/

関連する問題