using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Windows.Forms; namespace SHARP_CLAS_UI.Screen { public partial class Form_Log : Form { #region Enum enum Logs { None, Button, Alarm, Interlock, } #endregion #region Field Form_Frame _Parent; Logs Current_Log; #endregion #region Construct public Form_Log(Form_Frame _Parent) { InitializeComponent(); this._Parent = _Parent; Current_Log = Logs.None; } #endregion #region Form_Function private void btn_Date_Log_Open_Click(object sender, EventArgs e) { string root_path = Get_Log_Path(); if(root_path == null) { MessageBox.Show("Please Check Log."); return; } DateTime dt_start = dtp_Start_Date.Value; DateTime dt_end = dtp_End_Date.Value; if (dtp_Start_Date.Value.Year > dtp_End_Date.Value.Year || (dtp_Start_Date.Value.Year == dtp_End_Date.Value.Year && dtp_Start_Date.Value.DayOfYear > dtp_End_Date.Value.DayOfYear)) { MessageBox.Show("Please Check Date."); return; } lv_Log_Data.Items.Clear(); while(true) { try { string file_path = root_path + $"{dt_start.Year}\\{dt_start.Month:d2}\\{Current_Log}_{dt_start.Day:d2}.csv"; Log_Date_Set(file_path); if (dt_start.Year == dt_end.Year && dt_start.Month == dt_end.Month && dt_start.Day == dt_end.Day) break; else dt_start = dt_start.AddDays(1.0); } catch(Exception) { break; } } } private void btn_Time_Log_Open_Click(object sender, EventArgs e) { string root_path = Get_Log_Path(); if (root_path == null) { MessageBox.Show("Please Check Log."); return; } if (dtp_Start_Time.Value.TimeOfDay > dtp_End_Time.Value.TimeOfDay) { MessageBox.Show("Please Check Time."); return; } DateTime dt_start = dtp_Start_Date.Value; lv_Log_Data.Items.Clear(); try { string file_path = root_path + $"{dt_start.Year}\\{dt_start.Month}\\{Current_Log}_{dt_start.Day}.csv"; Log_Time_Set(file_path, dtp_Start_Time.Value, dtp_End_Time.Value); } catch (Exception) { } } private void btn_Alarm_Log_Click(object sender, EventArgs e) { lv_Log_Data.Items.Clear(); lv_Log_Data.Columns.Clear(); lv_Log_Data.Columns.Add("Date", 150); lv_Log_Data.Columns.Add("Code", 525); lv_Log_Data.Columns.Add("Description", 900); Current_Log = Logs.Alarm; } #endregion #region Function public void Set_Language() { try { lb_Select_data.Text = "■" + resLanguage.SELECT_DATE; lb_Start.Text = resLanguage.Start; lb_End.Text = resLanguage.END; btn_Date_Log_Open.Text = resLanguage.SELECT; lb_Start_1.Text = resLanguage.Start; lb_End_1.Text = resLanguage.END; btn_Time_Log_Open.Text = resLanguage.SELECT; btn_Open_Folder.Text = resLanguage.OPEN_FOLDER; btn_Save_File_CSV.Text = resLanguage.SAVE_TO_CSV; rb_Button_Log.Text = resLanguage.BUTTON; rb_Alarm_Log.Text = resLanguage.Alarm; rb_Interlock_Log.Text = resLanguage.INTERLOCK; } catch(Exception ex) { } } private string Get_Log_Path() { string str = null; switch(Current_Log) { case Logs.Button: { str = "D:\\Logger\\Button\\"; break; } case Logs.Alarm: { str = "D:\\Logger\\Alarm\\"; break; } case Logs.Interlock: { str = "D:\\Logger\\Interlock\\"; break; } } return str; } private bool Log_Date_Set(string filepath) { List list_st = new List(); if (!File.Exists(filepath)) return false; using (FileStream fs = new FileStream(filepath, FileMode.Open)) { using (StreamReader sr = new StreamReader(fs)) { while (true) { try { string str = sr.ReadLine(); if (str == string.Empty || str == null) break; string[] procstr = str.Split(','); list_st.Add($"{procstr[0]}\t{procstr[1]}\t{procstr[2]}"); } catch (Exception) { } } } } foreach (string str in list_st.ToArray()) { ListViewItem lvi = new ListViewItem(str.Split('\t')); lv_Log_Data.Items.Add(lvi); } return true; } private bool Log_Time_Set(string filepath, DateTime start_time, DateTime end_time) { List list_st = new List(); if (!File.Exists(filepath)) return false; using (FileStream fs = new FileStream(filepath, FileMode.Open)) { using (StreamReader sr = new StreamReader(fs)) { while (true) { try { string str = sr.ReadLine(); if (str == string.Empty || str == null) break; string[] procstr = str.Split(','); DateTime dt = DateTime.Parse(procstr[0]); if(start_time.TimeOfDay.Ticks <= dt.TimeOfDay.Ticks && dt.TimeOfDay.Ticks <= end_time.TimeOfDay.Ticks) { list_st.Add($"{procstr[0]}\t{procstr[1]}\t{procstr[2]}"); } } catch (Exception) { } } } } foreach (string str in list_st.ToArray()) { ListViewItem lvi = new ListViewItem(str.Split('\t')); lv_Log_Data.Items.Add(lvi); } return true; } #endregion private void btn_Open_Folder_Click(object sender, EventArgs e) { string root_path = Get_Log_Path(); if (root_path == null) { MessageBox.Show("Please Check Log."); return; } if (Directory.Exists(root_path)) System.Diagnostics.Process.Start(root_path); else MessageBox.Show($"{root_path} is not exist."); } private void btn_Save_File_CSV_Click(object sender, EventArgs e) { if (lv_Log_Data.Items.Count == 0) { return; } SaveFileDialog dialog = new SaveFileDialog(); dialog.Title = "파일 저장하기"; dialog.Filter = "CSV 파일|*.csv|Text 파일|*.txt"; dialog.InitialDirectory = "D:\\"; dialog.FileName = $"{Current_Log.ToString()}"; if (dialog.ShowDialog() != DialogResult.OK) return; string selectPath = dialog.FileName; using (StreamWriter outPutFile = new StreamWriter(selectPath, false, Encoding.Default)) { string rows = ""; foreach (ColumnHeader header in lv_Log_Data.Columns) { rows += header.Text + ","; } rows = rows.Substring(0, rows.Length - 1); outPutFile.WriteLine(rows, Encoding.Default); foreach (ListViewItem lvi in lv_Log_Data.Items) { rows = ""; foreach (ListViewItem.ListViewSubItem str in lvi.SubItems) rows += str.Text + ","; rows = rows.Substring(0, rows.Length - 1); outPutFile.WriteLine(rows, Encoding.Default); } } } private void rb_Log_CheckedChanged(object sender, EventArgs e) { RadioButton rb = (RadioButton)sender; if (!rb.Checked) return; if (rb == rb_Button_Log) { lv_Log_Data.Items.Clear(); lv_Log_Data.Columns.Clear(); lv_Log_Data.Columns.Add("Date", 150); lv_Log_Data.Columns.Add("Button", 525); lv_Log_Data.Columns.Add("Description", 900); Current_Log = Logs.Button; } else if (rb == rb_Alarm_Log) { lv_Log_Data.Items.Clear(); lv_Log_Data.Columns.Clear(); lv_Log_Data.Columns.Add("Date", 150); lv_Log_Data.Columns.Add("Code", 525); lv_Log_Data.Columns.Add("Description", 900); Current_Log = Logs.Alarm; } else if(rb == rb_Interlock_Log) { lv_Log_Data.Items.Clear(); lv_Log_Data.Columns.Clear(); lv_Log_Data.Columns.Add("Date", 150); lv_Log_Data.Columns.Add("Code", 525); lv_Log_Data.Columns.Add("Description", 900); Current_Log = Logs.Interlock; } } } }