2012-08-16 48 views
1

我在我的sql數據庫中導入.csv文件。我正在使用TextFieldParser。TextFieldParser不解析最後一行

我的代碼是

TextFieldParser parser = new TextFieldParser(file); 
//single file 
//TextFieldParser parser = new TextFieldParser(CSVFolderPath + "\\" + file); 
parser.TextFieldType = FieldType.Delimited; 
parser.SetDelimiters(","); 
int k = 0; 
while (!parser.EndOfData) 
{ 
    //Processing row 
    string[] fields = parser.ReadFields(); 
    if (k != 0) 
    { 
     for (int i = 0; i < fields.Length; i++) 
     { 
      stationcode = fields[0].ToString().Substring(4, 5); 
      //if (fields[1].ToString().Substring(14, 8) == date) 
      //{ 
      if (i == 0) 
      { 

       dr = workTable.NewRow(); 
       dr[i] = fields[i].Substring(0, fields[i].Length - 4); 

      } 
      else if (i == 3) 
      { 
       dr[i] = Convert.ToDateTime(fields[i].ToString()); 
      } 
      else if (i == 4) 
      { 
       dr[i] = Convert.ToDateTime(fields[i].ToString()); 
      } 
      else if (i == 5) 
      { 
       dr[i] = Convert.ToInt32(fields[i].ToString()); 
      } 
      else 
       dr[i] = fields[i].ToString(); 
      if (i == 5) 
      { 
       workTable.Rows.Add(dr); 
      } 
      //} 

     } 
    } 
    k = k + 1; 
} 
parser.Close();  

這裏工作臺是數據表。

代碼解析文件正常。

但在我的csv文件最後一行用於摘要。一些字段的總數。

我不想包括該行插入數據表。

我該怎麼做?

回答

0

如果內存空間不成問題。首先加載CSV行的列表,然後解析每行並保存最後一行。否則,您需要某種方法來識別彙總行。 (比如像日期那樣的空數據),這可以指示解析器忽略該行。

處理導入數據的最佳方法是嘗試確定導入文件將只包含要導入的數據。 (沒有標題,沒有摘要等)不幸的是,很多公司都試圖導入Reports而不是實際的導出文件。

+0

,謝謝,我已經把忽略最後一行來分析一個信號。 – 2012-08-16 07:46:30