将csv文件与表的列进行比较

时间:2011-10-14 09:50:36

标签: c# arrays list arraylist compare

我有一个像这样的csv文件:

george,
nick,
mary,
john, 
micheal

用户可以制作他喜欢的文件。所以他可以有4或5或28行。

我有另一个csv文件,我将其分配给名为fileList1的ArrayList。这个文件是一个议程。

如果议程中的名称不在csv 中,则会给出,然后打印一条消息。(这是我需要查找的内容)。关键是csv都可以是动态的。线的数量不是标准的。

我还有一张桌子colB[]。此表包含将与列进行比较的文件列表。

问题在于我无法在arraylist中选择特定的列,因为它是一个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 
                 }
                 }

1 个答案:

答案 0 :(得分: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;
    }