C# 动态(不定)类型和不定参数数量,使用param写入CSV文档的最简单方法,提供excel(或记事本)阅读支持格式

  在开发一个项目,使用C#写入CSV文件时,虽并未遇到太多阻碍,但是很多小伙伴估计和我有过同样的想法。简单的写入CSV,固定参数数量就好了很简单写完。但是如果遇到你得到的数据参数数量和参数类型未知或者动态变化怎么办,似乎好像不能固定在某几个形参中。因为我总想着每次造轮子(或写脚本)都想要做成自己的dll封装起来,等到第二次用的时候就能直接使用,不用再造一次车轮。

  减少重复工作是程序员提高效率的有效办法之一,而且终身受用,哪怕轮子不合适也是在源代码上增加接口或方法来拓展,哪天就成了“万用”轮子呢。

 

  废话结束,直入主题。

1、形参使用了 params 搭配 object ,动态参数输入,也就是不知参数的数量和各个参数的类型,进行输入。第一次琢磨出的用法,并不知在意其中的“风险”。

2、string temp = head + i.ToString() + ",4" + tail;  这句是占用符和格式字符串的使用,其实就是熟悉的  Console.WriteLine(“工号{0}, 姓名{1}, 年龄{2}”, n1,n2,n3);其中引号部分的格式。

3、if(i == array.Length-1) 其实是为了增加分隔符[,],旨在为了在excel中能正常分隔显示,此处你不需要可忽略。

4、补充了需要文件操作的代码,可以参考一下。最喜欢简单实用的代码,比长篇大论是不是大家更有耐心看完。

5、WriteCSV_Array()的使用,我是写到了一个事件当中,实际测试我就放到按钮中,这两段代码已经实现了整个CSV文件的写入,当然是关闭代码,或程序终止(暂停)后仍有保存。效果就是写入CSV文件,事件每触发一次,就写一行。参数类型:整数、double、浮点、字符串都能正常写入,参数数量当然是任意的。

6、最后希望看到的朋友多多支持,评论一下,有不足的我加以修改,有用的是对我的勉励,谢谢大家!

 

        public void WriteCSV_Array(params object[] array)
        {
            string writeString = "";
            string head = "{";
            string tail = "}";
            for (int i = 0; i < array.Count();i++)
            {
                string temp = head + i.ToString() + ",4" + tail;//效果:{0,4}
                if(i == array.Length-1)//如果是最后一个元素,不加分隔符[,]
                {
                    writeString = writeString + temp;
                }
                else    //不是最尾元素,则加分隔符[,],分隔符作用是在:用excel打开时,分隔单元显示
                {
                    writeString = writeString + temp + ",";//效果:{0,4},{1,4},...
                }
            }
            if (File.Exists(@"E:\Test1.csv"))
            {
                sw.WriteLine(writeString, array);// new Object[] {array});
                sw.Flush();
            }
            else
            {   //如果无该文件,重新初始化一次
                InitCSVControl();
            }
        }
        public void InitCSVControl(string filePath = @"E:\",string fileName = @"TestCSVdll.csv",
                                FileMode mode = FileMode.Create, 
                                FileAccess access = FileAccess.Write)
        {
            string pathName = filePath + fileName;
            fs = new FileStream(pathName, FileMode.Create, FileAccess.Write);
            sw = new StreamWriter(fs);
        }
        private void button1_Click(object sender, EventArgs e)
        {
            object[] array;
            array = new object[] { 0.0011, 0.0022, 0.0033, 0.0044, 0.0055 };
            csv_controller.WriteCSV_Array(array);
        }

 

posted @ 2019-10-19 17:14  Lorzen  阅读(1377)  评论(0编辑  收藏  举报