winform CSV文件的存储和读取方式(datatable)

需求:根据某个动作,存储他的开始时间、动作步骤、完成时间。后续判断是否有异常。

其实可以增加数据库字段,因底层影响,只能通过存储日志形式获取数据。

1.绑定表结构,行列。

(我采用的行数据是根据业务逻辑里面判断进行赋值)

        /// <summary>
        /// 绑定DataTable sqq add 200722
        /// </summary>
        /// <param name="step">步骤</param>
        /// <returns>返回DataTable</returns>
        /// <returns></returns>
        public DataTable BindDataTable(string step)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("DailyStartDate", typeof(DateTime));
            dt.Columns.Add("BFStep", typeof(int));
            dt.Columns.Add("DailyEndDate", typeof(DateTime));
            if (step == "DailyStartDate")
            dt.Rows.Add(DailyStartDate, null, null);
            else if (step == "BFStep")
            dt.Rows.Add(DailyStartDate, BFStep, null);
            else if (step == "DailyEndDate")
            dt.Rows.Add(DailyStartDate, BFStep, DailyEndDate);
            return dt;
        }

 

DataTable dr = BindDataTable();
 SaveDataTableCSV(dr);        /// <summary>
        /// 将DataTable中数据写入到CSV文件中
        /// </summary>
        /// <param name="dt">提供保存数据的DataTable</param>
        /// <param name="fileName">CSV的文件路径</param>
        public void SaveDataTableCSV(DataTable dt)
        {
            string path = Config.GetFilePath("Log\\NewDailyMaintenance.csv");
FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write); StreamWriter sw = new StreamWriter(fs, Encoding.Default); string data = ""; //写出列名称 for (int i = 0; i < dt.Columns.Count; i++) { data += dt.Columns[i].ColumnName.ToString(); if (i < dt.Columns.Count - 1) { data += ","; } } sw.WriteLine(data); //写出各行数据 for (int i = 0; i < dt.Rows.Count; i++) { data = ""; for (int j = 0; j < dt.Columns.Count; j++) { data += dt.Rows[i][j].ToString(); if (j < dt.Columns.Count - 1) { data += ","; } } sw.WriteLine(data); } sw.Close(); fs.Close(); }

2.读取csv数据,两种方式 ①转换为datatable②存储字典。

我采用的第二种,方便判断校验。

  Dictionary<string, string> dic = new Dictionary<string, string>();
 /// <summary>
        /// 将CSV文件的数据读取到DataTable中
        /// </summary>
        /// <param name="fileName">CSV文件路径</param>
        /// <returns>列行存储到字典</returns>
        public void OpenReadCSV()
        {
            string path= Config.GetFilePath("Log\\NewDailyMaintenance.csv");if (File.Exists())
            {
            //DataTable dt = new DataTable();
            FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
            StreamReader sr = new StreamReader(fs, Encoding.Default);
            //记录每次读取的一行记录
            string strLine = "";
            //记录每行记录中的各字段内容
            string[] aryLine;
            //标示列数
            int columnCount = 0;
            //标示是否是读取的第一行
            bool IsFirst = true;

            //逐行读取CSV中的数据
            while ((strLine = sr.ReadLine()) != null)
             {
                aryLine = strLine.Split(',');
                if (IsFirst == true)
                {
                    IsFirst = false;
                    columnCount = aryLine.Length;
                    ////创建列
                    //for (int i = 0; i < columnCount; i++)
                    //{
                    //    DataColumn dc = new DataColumn(aryLine[i]);
                    //    dt.Columns.Add(dc);
                    //}
                }
                else
                {
                    //DataRow dr = dt.NewRow();
                    //for (int j = 0; j < columnCount; j++)
                    //{
                    //    dr[j] = aryLine[j];
                    //}
                    //dt.Rows.Add(dr);
                    for (int j = 0; j < columnCount; j++)
                    {
                        if(j==0)
                        dic.Add("DailyStartDate", aryLine[j]);
                        else if (j ==1)
                        dic.Add("BFStep", aryLine[j]);
                        else if (j == 2)
                        dic.Add("DailyEndDate", aryLine[j]);
                    }
                  }
            }
            sr.Close();
            fs.Close();
            //return dt;
            }
            //return null;
        }

 3.读取字典

dic.TryGetValue("DailyStartDate", out string dailyStartDateValue);

 

posted @ 2020-07-23 11:08  suqq小白  阅读(1486)  评论(0编辑  收藏  举报