0에서 C#03 - 파일 흐름에서 txt/excel 형식으로 데이터 저장

데이터를 로컬에 흐름으로 저장


주로 DataTable, 로그 로그, 파일 흐름 File Stream, Stream Writer 클래스를 소개하고 데이터를 txt와 excel 형식으로 저장합니다.
1. TestDataTable 클래스 만들기
CreateTable () 방법은 데이터 테이블을 만들고, SaveTable ToExcel (string fileName) 방법은 데이터 테이블을 파일 이름이 fileName인 excel 형식 파일로 저장하고, CreateDirectory (string fileName) 방법은 파일이 존재하는지 확인하고, 존재하지 않으면 자동으로 생성합니다.
class TestDataTable: DataTable
    {
        public void CreateTable()
        {
            this.Columns.Add("Time(s)", System.Type.GetType("System.String"));
            this.Columns.Add("Ch", System.Type.GetType("System.String"));
            this.Columns.Add("BER", System.Type.GetType("System.String"));

            const int length1 = 4;
            const int length2 = 10;

            int[][] data = new int[length1][];
            // 
            data[0] = new int[length2] { 13, 25, 21, 33, 28, 39, 43, 36, 42, 36 };
            // 
            data[1] = new int[length2] { 20, 13, 10, 5, 15, 7, 10, 14, 19, 20 };
            // 
            data[2] = new int[length2] { 78, 92, 65, 83, 90, 59, 63, 72, 88, 98 };
            // 
            data[3] = new int[length2] { 45, 49, 39, 47, 52, 76, 67, 51, 57, 67 };

            for (int i = 0; i < length2; i++)
            {
                for (int j = 0; j < length1; j++)
                {
                    DataRow dr = this.NewRow();
                    dr[0] = i + 1;
                    dr[1] = j;
                    dr[2] = data[j][i];
                    this.Rows.Add(dr);
                }
            }
        }

        public void SaveTableToExcel(string fileName)
        {
            CreateDirectory(fileName);
            StringBuilder title = new StringBuilder();
            FileStream fileStream = new FileStream(fileName, FileMode.OpenOrCreate);
            StreamWriter writer = new StreamWriter(new BufferedStream(fileStream), System.Text.Encoding.Default);

            for (int i = 0; i < this.Columns.Count; i++)
            {
                title.Append(this.Columns[i].ColumnName + "\t"); // : 
            }

            title.Append("
"
); writer.Write(title); foreach (DataRow row in this.Rows) { StringBuilder content = new StringBuilder(); for (int i = 0; i < this.Columns.Count; i++) { content.Append(row[i] + "\t");// : } content.Append("
"
); writer.Write(content); } writer.Close(); fileStream.Close(); } public void CreateDirectory(string fileName) { DirectoryInfo directoryInfo = Directory.GetParent(fileName); if (!directoryInfo.Exists) { directoryInfo.Create(); } } }

2. 로그 로그 클래스 만들기
파일 이름 FileName을 클래스의 속성으로 정의하고 함수를 구성할 때 값을 부여합니다.SaveLogToTxt(string info) 방법은 파일 이름이 fileName인 txt 파일에 데이터 info를 저장합니다.CreateDirectory() 메서드와 마찬가지로 파일이 있는지 확인합니다.
class Log
    {
        private string fileName; 

        public string FileName
        {
            set
            {
                this.fileName = value;
            }
            get
            {
                return this.fileName;
            }
        }

        public Log(string fileName)
        {
            this.fileName = fileName;
            CreateDirectory();
        }  

        public void SaveLogToTxt(string info)  
        {    
            StreamWriter writer = null;  
            FileStream fileStream = null;

            try  
            {
                System.IO.FileInfo fileInfo = new System.IO.FileInfo(this.fileName);  
                if (!fileInfo.Exists)  
                {  
                    fileStream = fileInfo.Create();  
                    writer = new StreamWriter(fileStream);  
                }  
                else  
                {  
                    fileStream = fileInfo.Open(FileMode.Append, FileAccess.Write);  
                    writer = new StreamWriter(fileStream);  
                }  
                writer.WriteLine(info);
            }  
            finally  
            {  
                if (writer != null)  
                {  
                    writer.Close();  
                    writer.Dispose();  
                    fileStream.Close();  
                    fileStream.Dispose();  
                }  
            }  
        }  

        public void CreateDirectory()  
        {  
            DirectoryInfo directoryInfo = Directory.GetParent(this.fileName);  
            if (!directoryInfo.Exists)  
            {  
                directoryInfo.Create();  
            }  
        }  
    }  

3. 호출 클래스 방법으로 데이터 저장
실례화 클래스, 데이터 테이블을 만들고 테이블을 txt 형식과 excel 형식으로 저장하여 시간 이름을 지정합니다.
TestDataTable dt = new TestDataTable();
dt.CreateTable();
dt.Rows.Clear(); // table 

DateTime startTime = DateTime.Now;
Log log = new Log(@"Log\" + startTime.ToString("yyyyMMddHHmmss") + ".txt");// , exe Log 

for (int i = 0; i < 4; i++)
{
    DataRow dr = dt.NewRow();
    dr[0] = (int)second;
    dr[1] = i;
    dr[2] = BERByChannel[i].ToString("E2");
    dt.Rows.Add(dr);// table

    string info = string.Format("{0}: Time(s): {1}, Ch: {2}, BER: {3}", DateTime.Now, dr[0], dr[1], dr[2]);
    log.SaveLogToTxt(info);// txt  
}

// excel 
string fileName = @"TestRecord\" + startTime.ToString("yyyyMMddHHmmss") + ".xls";
dt.SaveTableToExcel(fileName);// , exe TestRecord 

좋은 웹페이지 즐겨찾기