Maison  >  Article  >  développement back-end  >  Auto-apprentissage C#03 à partir de 0 - Le flux de fichiers enregistre les données au format txt/excel

Auto-apprentissage C#03 à partir de 0 - Le flux de fichiers enregistre les données au format txt/excel

黄舟
黄舟original
2017-02-04 10:35:571682parcourir

Présente principalement les classes DataTable, Log, FileStream et StreamWriter pour enregistrer les données aux formats txt et Excel.

1. Créez la classe TestDataTable

La méthode CreateTable() crée une table de données, la méthode SaveTableToExcel(string fileName) enregistre la table de données sous un fichier au format Excel nommé fileName, CreateDirectory(string fileName) ) pour vérifier si le fichier existe. S'il n'existe pas, il en créera automatiquement un.

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("\n");
            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("\n");
                writer.Write(content);
            }
            writer.Close();
            fileStream.Close();
        }        public void CreateDirectory(string fileName)
        {
            DirectoryInfo directoryInfo = Directory.GetParent(fileName);            
if (!directoryInfo.Exists)
            {
                directoryInfo.Create();
            }
        }  
    }

2. Créez une classe Log Log

Définissez le nom de fichier FileName comme attribut de la classe et attribuez-le dans le constructeur. La méthode SaveLogToTxt(string info) enregistre les informations sur les données dans un fichier txt nommé fileName. De même, la méthode CreateDirectory() vérifie si le fichier existe

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. Appelez la méthode de classe pour enregistrer les données

Instanciez la classe, créez une table de données et enregistrez la table au format txt. format et format Excel Nommé d'après le temps.

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文件夹里

Ce qui précède est le contenu de l'auto-apprentissage C#03 à partir de 0 - flux de fichiers enregistrant les données au format txt/excel. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www. .php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn