2011-10-14 85 views
0

的專欄中,我有一個CSV文件是這樣的:比較csv文件與表格

george, 
nick, 
mary, 
john, 
micheal 

用戶可以使他喜歡的文件。所以他可以有4或5或28行。

我有一個其他的csv文件,我將它分配給名爲fileList1的ArrayList。這個文件是一個議程。

如果議程中的名稱不在csv中,則會給出該名稱,然後打印消息。(這是我需要找到的)。問題是,兩個csv都可以是動態的。行數不是標準的。

我也有一張表,colB[]。此表格包含將與列進行比較的文件列表。

問題是我無法選擇arraylist中的特定列,因爲它是一個數組列表。

ArrayList fileList1 = new ArrayList(); 
    string stringforData; 

    private void button1_Click(object sender, EventArgs e) 
      { 
       // opens **BROWSE** 

       string filename = ""; 
       DialogResult result = openFileDialog1.ShowDialog(); 
       if (result == DialogResult.OK) 
       { 
        filename = openFileDialog1.FileName; 

        textBox1.Text = filename; 

    // Read the file and display it line by line. 

        string line; 

        System.IO.StreamReader file1 = new System.IO.StreamReader(textBox1.Text); //reads the path from textbox 

        stringforData = file1.ReadLine();  
        while ((line = file1.ReadLine()) != null) 
        { 
         // bazei stoixeia mesa ston pinaka 
         fileList1.Add(line.Split(';'));//split the file and assign it in //the fileList1 
        } 
        file1.Close(); 
       } 
      } 


private void button3_Click(object sender, EventArgs e) 
      { 

       this.textBox2.Clear(); 
       string[] colB = new string[]; 

       for (int j = 0; j < colB.Length; j++) 
       { 
         if (Path.GetExtension(colB[j]) == ".csv") 
             { 

       string path = Path.GetDirectoryName(textBox1.Text); 
       string g = Path.Combine(path, colB[j]); 


       textBox2.Text += "the path is " + g + " " + Environment.NewLine; 


       System.IO.StreamReader gi = new System.IO.StreamReader(g); 
       string itemss; 
       ArrayList ArrayForLists=new ArrayList(); 
        while ((itemss = gi.ReadLine()) != null) 
             { 
       ArrayForLists.AddRange(itemss.Split(';'));// assign to the arraylist the list that we are searching 
       } 
       } 

回答

0

看來,一個ArrayList是不是一個好的選擇,因爲你不能選擇所需的列。爲什麼不使用免費的C#CSV解析器: http://www.filehelpers.com/

從這裏找到: CSV parser/reader for C#?

在上面的鏈接有還加載一個CSV到一個DataTable,它給你引用一個列中的選項的例子(而不是ArrayList)。


編輯: 我從給定的鏈接粘貼代碼:

static DataTable CsvToDataTable(string strFileName) 
    { 
     DataTable dataTable = new DataTable("DataTable Name"); 

     using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + Directory.GetCurrentDirectory() + "; Extended Properties = \"Text;HDR=YES;FMT=Delimited\"")) 
     { 
      conn.Open(); 
      string strQuery = "SELECT * FROM [" + strFileName + "]"; 
      OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(strQuery, conn); 

      adapter.Fill(dataTable); 
     } 
     return dataTable; 
    } 
+0

對不起湯姆,這是不想要的anwser。 –

+0

我編輯了我的答案。將CSV解析爲DataTable不能解決您的問題嗎?如果不是,你能解釋爲什麼嗎? – Tom

+0

如果我在我的項目中添加此代碼,則出現錯誤。看人,我只需要一些代碼或想法,以及如何將Arraylist切換到其他數據結構。 –