2012-07-16 88 views
2

我试图读取文本文件中的数据并将其加载到数据集中,但下面图像中的不同列仅作为一个长列出现。我想将数据作为7列返回(与其在下图中显示的方式相同)。如何从文本文件中正确读取列

这是代码正在使用,

public DataSet LoadTxtFile(int numberOfRows) 
    { 
     DataSet ds = new DataSet(); 
     //try 
     //{ 
      // Creates and opens an ODBC connection 
      string strConnString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + this.dirCSV.Trim() + ";Extensions=asc,csv,tab,txt;Persist Security Info=False"; 
      string sql_select; 
      OdbcConnection conn; 
      conn = new OdbcConnection(strConnString.Trim()); 
      conn.Open(); 

      //Creates the select command text 
      if (numberOfRows == -1) 
      { 
       sql_select = "select * from [" + this.FileNevCSV.Trim() + "]"; 
      } 
      else 
      { 
       sql_select = "select top " + numberOfRows + " * from [" + this.FileNevCSV.Trim() + "]"; 
      } 

      //Creates the data adapter 
      OdbcDataAdapter obj_oledb_da = new OdbcDataAdapter(sql_select, conn); 

      //Fills dataset with the records from CSV file 
      obj_oledb_da.Fill(ds, "csv"); 

      //closes the connection 
      conn.Close(); 
     //} 
     //catch (Exception e) //Error 
     //{ 
      //MessageBox.Show(e.Message, "Error - LoadCSV",MessageBoxButtons.OK,MessageBoxIcon.Error); 
     //} 
     return ds; 
    } 

Text File Sample Data

+0

什么语言,看起来像Java/C#,但您应该适当地标记它。 – 2012-07-16 07:36:34

+0

你的名字指出它是C# – 2012-07-16 07:37:17

回答

3

我通常采用一个简单的解决方案,即我访问该文件,我读了所有行,在一个循环我分割线串,创建并填充新的数据行,最后我的数据行添加到数据表:

string[] records = File.ReadAllLines(path); 
foreach(string record in records) 
{ 
    DataRow r = myDataTable.NewRow(); 
    string[] fields = record.Split('\t'); 
    /* Parse each field into the corresponding r column 
    * .... 
    */ 
    myDataTable.rows.Add(r); 
} 

我还发现关于如何访问与OleDb的共同的CSV文件的解决方案连接和模式信息文件。我从未使用过这种方法。

参考文献: