2013-08-02 140 views
0

我想通過csv上傳一系列客戶端信息,我在eginning中遇到了一些問題,但是我之前的文章已經回答了,所以我能夠開始讀取數據它只讀取第一行。只是想知道如果有人有任何想法。我已經包括以下csv文件只讀第一行

private void btnUpload_Click(object sender, EventArgs e) 
    { 
     //Browse for file 
     OpenFileDialog ofd = new OpenFileDialog(); 
     //Only show .csv files 
     ofd.Filter = "Microsoft Office Excel Comma Separated Values File|*.csv"; 
     DialogResult result = ofd.ShowDialog(); 

     //If the user selects a valid file 
     if (result == DialogResult.OK) 
     { 
      //File is delimited by a comma 
      char[] laClientDelim = { ',' }; 

      //New object for string manipulation 
      objStringManipulation = new StringManipulation(); 

      // Parse the csv file 
      List<string[]> lsClientList = objStringManipulation.parseCSV(ofd.FileName, laClientDelim); 

      foreach (string[] laClient in lsClientList) 
      { 
       //Create new object for manipulating the database 
       objSqlCommands = new SqlCommands("Client", "ClientName"); 



       string[] records = File.ReadAllLines(ofd.FileName); // read the file completely line by line 
       char splitChar = ','; 
       int splitCharCount = 0; 
       int k = 0; 


        string[] fields = records[k].Split(splitChar); // reads all the single values per line. 'splitChar' should be the delimiter. 
        splitCharCount++; 
        if (splitCharCount >= 4 && splitCharCount <= 10) 
        { 
         var stuff = from l in File.ReadLines(ofd.FileName) 
            let x = l.Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries) 
               .Skip(1) 
              .Select(s => char.Parse(s)) 
            select new 
            { 
             Client = x, 
             ClientName = x 
            }; 
        } 


        //Inserts the client info into datbase 
       objSqlCommands.sqlCommandInsertorUpdate("INSERT", records[k]);//laClient[0]); 
       k++; 
        //Refreshs the Client table on display from the 
        this.clientTableAdapter.Fill(this.kIIDImplementationCalcDataSet.Client); 

        //MAKE SURE TO ONLY ADD IN CLIENT AND CLIENT NAME 
        //update the view 
        dgvClientlst.Update() ; 





      } 

     } 
    } 
+0

我想你理解一個變量的範圍。變量K在for循環中定義,因此在每個循環中一次又一次地實例化爲0。在你的循環之外聲明K。 – Guanxi

回答

1

代碼你的循環是這樣的本質:

foreach (string[] laClient in lsClientList) 
{ 
    int k = 0; 
    string[] records = File.ReadAllLines(ofd.FileName); 

    string[] fields = records[k].Split(splitChar); 
    k++; 
} 

你的「K」值永遠不會使得過去0每個laClient。您需要爲每條線內部循環。

+0

* facepalm *輝煌的感謝,多數民衆贊成修復它,noob的錯誤 – user2546071

0

我知道我的答案不完全是你要找的,但如果你將.csv文件轉換爲.xls文件,那麼你可以很容易地操作它。我多次做過這個,如果你想要,我可以給你提供代碼說明。

0

在Jonesy的回答(因爲我還不能評論)上擴展,在循環之外聲明變量k。它每次都重置爲零。

int k = 0; 
foreach (string[] laClient in lsClientList) 
{ 
    string[] records = File.ReadAllLines(ofd.FileName); 

    string[] fields = records[k].Split(splitChar); 
    k++; 
} 
+0

把K外循環修復獲得更多的問題不僅僅是第一行,但現在我面臨的問題,選擇不工作,所以我越來越所有的數據,而不是指定的子字符串 – user2546071

+0

Duh。需要遍歷foreach塊中的記錄和行。正如我已經證明的那樣,一個人從來沒有經驗過犯noob錯誤。 –