从CSV文件读取所有列

时间:2019-04-05 10:49:19

标签: c# csv

我是C#的新手。我需要从CSV文件中读取所有列。 在我的CSV文件中,我有:日期,test1(在test1下有一些随机数据),下限(来自test1数据的最低编号,该数字在下限的所有行中均被复制。最后一列是上限(来自test1数据的最高编号) )。

这是为了计算过程能力。

我发现以下代码仅读取第一列。 但是我需要阅读所有专栏文章

 public static DataTable OpenCSV(string filePath)
    {
        DataTable dt = new DataTable(); 
        FileStream fs = new FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read);

        StreamReader sr = new StreamReader(fs);
        string strLine = "";
        string[] aryLine = null;
        string[] tableHead = null;
        int columnCount = 0;       
        bool IsFirst = true;
        while ((strLine = sr.ReadLine()) != null)
        {
            if (IsFirst == true)
            {
                tableHead = strLine.Split(',');
                IsFirst = false;
                columnCount = tableHead.Length;
                for (int i = 0; i < columnCount; i++)
                {
                    DataColumn dc = new DataColumn(tableHead[i]);
                    dt.Columns.Add(dc);                     
                }
            }
            else
            {
                aryLine = strLine.Split(',');
                DataRow dr = dt.NewRow();
                for (int j = 0; j < columnCount; j++)
                {
                    dr[j] = aryLine[j];
                }
                dt.Rows.Add(dr);
            }
        }
        if (aryLine != null && aryLine.Length > 0)
        {
            dt.DefaultView.Sort = tableHead[0] + " " + "asc";
        }
        sr.Close();
        fs.Close();
        return dt;
    }

    DataTable dt;

    public int Val1 { get; private set; }
    public int Val2 { get; private set; }
    public int Cp { get; private set; }

    private void btOK_Click(object sender, EventArgs e)
    {
        dt = OpenCSV(textBox1.Text);
        foreach (DataRow dr in dt.Rows)
        {
            // Get the first column
            checkedListBox1.Items.Add(dr["Date"]);  
        }

我希望在读取文件上的所有列后进行一些计算

2 个答案:

答案 0 :(得分:0)

在foreach(dt.Rows中的DataRow dr)中,您的dr具有所有列。您可以通过在索引器中输入其他列名称来访问值。例如dr [“ test1”],dr [“ lowerlimit”],dr [“ higherlimit”]等

答案 1 :(得分:0)

这是读取csv文件的另一种方式:

List<string> lstDates = new List<string>();
List<string> lstTest = new List<string>();
string[] rows = File.ReadAllLines(filePath);
foreach(string r in rows)
{
  string[] cols = r.split(',');
  lstDates.Add(cols[0]);
  lstTest.add(cols[1]);
  //you can add other columns to lists
}
//if you need the lists to be arrays you can convert them
string[] arrDates = lstDates.ToArray();