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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM