C#上位机模块之CSV存储类

这篇具有很好参考价值的文章主要介绍了C#上位机模块之CSV存储类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在上位机中,经常会出现将数据存储到本地中,所以我写了一个常用的工具类用于直接调用,快速完成对CSV的存储。
工具类为非静态类,所以调用的时候需要新建对象去调用。
其中输入数据为:路径(string),题头(List),数据(List)
方法1:对项目debug路径下创建以时间为名字的CSV文件,并写入题头与数据
方法2:对绝对路径创建CSV文件,并写入题头与数据
方法3:对绝对路径的CSV文件追加数据
方法4:CSV保存时间,删除超出时间的路径
其中方法1与方法2是重载函数,使用时需要注意。
方法4在文件多的时候会出现运行时间慢的情况。其中测试时在100个文件中删除3个文件共耗时2.6ms。
方法1和2:在同一时间传入200个数据时耗时为0.99ms。
上述耗时仅作参考。

由于有人私信我新的方法,2023-3-28:新增3个方法
5.返回文件文件全部数据
6.返回文件最后一行数据
7.返回指定题头的列的全部数据,如果没有则返回-1

直接新建一个类,复制进去,然后修改命名空间即可

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SaveCSVFile//记得修改命名空间
{
    public class CreateCSV
    {
        /// <summary>
        /// 使用当前项目debug路径进行创建,名字为时间+CSV
        /// </summary>
        /// <param name="Title">题头</param>
        /// <param name="Data">数据</param>
        public void createCSV(List<string>Title,List<double>Data)
        {
            string now_str = System.AppDomain.CurrentDomain.BaseDirectory;
            string title = null ;
            //获取当前系统时间
            string datetime = DateTime.Now.ToString("yyyy-MM-dd")+"-"
                + DateTime.Now.Hour.ToString()+"-"+ 
                DateTime.Now.Minute.ToString()+"-"+DateTime.Now.Second.ToString();
            //创建文件并写入数据
            using (FileStream fsWrite = new FileStream(now_str + datetime+"CSV.csv",FileMode.OpenOrCreate,FileAccess.Write))
            {
                //写入题头
                foreach (var item in Title)
                {
                    title =title+item+",";
                }
                byte[] buffer = Encoding.UTF8.GetBytes(title);
                fsWrite.Write(buffer, 0, buffer.Length);//会将初始位置开始的字节进行覆盖
                fsWrite.Close();
                //写入数据
                using (StreamWriter sw = new StreamWriter(now_str + datetime + "CSV.csv", true))
                {
                    sw.Write("\r\n");
                    foreach (var item in Data)
                    {
                        sw.Write(item+",");
                    }
                }
            }
        }
        /// <summary>
        /// 使用绝对路径进行创建CSV
        /// </summary>
        /// <param name="str">输入的绝对路径值</param>
        /// <param name="Title">题头</param>
        /// <param name="Data">数据</param>
        public void createCSV(string str, List<string> Title, List<double> Data)
        {
            string title = null;
            //创建文件并写入数据
            using (FileStream fsWrite = new FileStream(str, FileMode.OpenOrCreate, FileAccess.Write))
            {
                //写入题头
                foreach (var item in Title)
                {
                    title = title + item + ",";
                }
                byte[] buffer = Encoding.UTF8.GetBytes(title);
                fsWrite.Write(buffer, 0, buffer.Length);//会将初始位置开始的字节进行覆盖
                fsWrite.Close();
                //写入数据
                using (StreamWriter sw = new StreamWriter(str, true))
                {
                    sw.Write("\r\n");
                    foreach (var item in Data)
                    {
                        sw.Write(item + ",");
                    }
                }
            }
        }
        /// <summary>
        /// 追加数据,写入下面的行
        /// </summary>
        /// <param name="str">输入的绝对路径值</param>
        /// <param name="Data">数据</param>
        public void AppendCSV(string str,List<double> Data)
        {
            //写入数据
            using (StreamWriter sw = new StreamWriter(str, true))
            {
                sw.Write("\r\n");
                foreach (var item in Data)
                {
                    sw.Write(item + ",");
                }
            }
            
        }
        /// <summary>
        /// 将保存时间外的文件进行删除
        /// </summary>
        /// <param name="Str">文件夹路径</param>
        /// <param name="Time">保存天数</param>
        public void SaveTime(string Str,int Time) 
        {

            DirectoryInfo theFolder = new DirectoryInfo(Str);  // 给出你的目录文件位置 
            FileInfo[] fileInfo = theFolder.GetFiles(); // 获得当前的文件夹内的所有文件数组

            string datetime = DateTime.Now.ToString("yyyy-MM-dd");//获取当前时间
            int now_day = ((int)(datetime[2] - '0') * 3650+ (int)(datetime[3] - '0') * 365 
                + (int)(datetime[5] - '0') * 10 + (int)(datetime[6] - '0') * 30
                + (int)(datetime[8] - '0') * 10 + (int)(datetime[9] - '0'));

            foreach (FileInfo NextFile in fileInfo)   //遍历文件
            {
                if (NextFile.Extension == ".csv")  // 得到你想要的格式
                {
                    FileInfo fi = new FileInfo(Str + "\\" + NextFile.Name);
                    string str_day = fi.CreationTime.ToString();
                    int day = ((int)(str_day[2] - '0') * 3650 + (int)(str_day[3] - '0') * 365
                + (int)(str_day[5] - '0') * 10 + (int)(str_day[6] - '0') * 30
                + (int)(str_day[8] - '0') * 10 + (int)(str_day[9] - '0'));
                    if(now_day-Time > day) 
                    {
                        File.Delete(Str+"\\"+NextFile.Name);//删除超出时间的文件
                    }
                }
            }
        }
        /// <summary>
        /// 读取绝对路径下的全部数据
        /// </summary>
        /// <param name="str">输入的绝对路径</param>
        /// <returns>返回全部字符,以\n换行为换行,,英文逗号为数字的间隔、</returns>
        public string ReadCSV(string str)
        {
            string CSVDate = null;
            using (StreamReader sr = new StreamReader(str,Encoding.UTF8)) 
            {
                while (!sr.EndOfStream)//判断是否读到文件最后,返回bool
                {
                    CSVDate= CSVDate+sr.ReadLine()+"\n";
                }
            }
            return CSVDate;
        }
        /// <summary>
        /// 读取绝对路径下CSV数据的最后一行
        /// </summary>
        /// <param name="str">绝对路径</param>
        /// <returns>返回CSV数据的最后一行</returns>
        public string ReadEndCSV(string str)
        {
            string CSVDate = null;
            using (StreamReader sr = new StreamReader(str, Encoding.UTF8))
            {
                while (!sr.EndOfStream)//判断是否读到文件最后,返回bool
                {
                    CSVDate =sr.ReadLine();
                }
            }
            return CSVDate;
        }
        /// <summary>
        /// 返回对应列的数据,如果没有对应的题头则返回-1
        /// </summary>
        /// <param name="str"></param>
        /// <param name="title"></param>
        /// <returns>列数据以,英文逗号分隔</returns>
        public string ReadColumnCSV(string str, string title)
        {
            string CSVDate = null;
            string time = null;
            List<string> columns_title = new List<string>();
            List<string> columns = new List<string>();
            int num = 0,lenth=0,n=0;
            using (StreamReader sr = new StreamReader(str, Encoding.UTF8))
            {
                CSVDate = sr.ReadLine();
                foreach (var item in CSVDate)
                {
                    if (item == ',')
                    {
                        columns_title.Add(time);
                        time = null;
                        continue;
                    }
                    time = time + item;
                }
                sr.Close();
            }
            lenth= columns_title.Count+1;
            if (columns_title.Contains(title))
            {
                foreach (var item in columns_title)
                {
                    if (item == title)
                        break;
                    num++;
                }
            }
            else
            {
                return "-1";
            }
            string quan=ReadCSV(str);
            time = null;
            foreach (var item in quan)
            {
                if (item == ','||item=='\n')
                {
                    if (item == '\n') n=n+2;
                    columns.Add(time);
                    time = null;
                    continue;
                }
                time = time + item;
            }
            int n_=0;
            for (int i = 0; i < columns.Count; i++)
            {
                title = title+",";
                if (i == (num+1+n_+ columns_title.Count * (n_ + 1)))
                {
                    title= title + columns[i]+ ",";
                    n_++;
                }
            }
            return title;
        }
    }
}

用法

//使用前,先创建CSV对象与题头,数据集合集合。
//str.Add(添加数据);
string now_str = System.AppDomain.CurrentDomain.BaseDirectory;//获取当前项目路径debug文件夹路径
   CreateCSV CSV=new CreateCSV();
        List<string> str = new List<string>();
        List<double> dou = new List<double>();
        //使用绝对路径的方法
        CSV.createCSV(now_str+"CSV.csv", str,dou);

后续如果还有什么需要增加可以评论区评论,如果我后面还遇到需要增加的方法再增加文章来源地址https://www.toymoban.com/news/detail-819562.html

到了这里,关于C#上位机模块之CSV存储类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c# CSV 笔记

    csv读取 csv写

    2024年02月07日
    浏览(27)
  • excel文件保存成CSV

    Sub CsvOutput()     Dim strNow As String     Dim csvFile As String     Dim lastRow As String     Dim targetRange As Range     Dim wb As Workbook     Dim fso As Object               strNow = Format(Now, \\\"yyyymmddhhnnss\\\")     csvFile = Application.GetSaveAsFilename(InitialFileName:=\\\"XXXXXXCSV_\\\" strNow \\\".csv\\\", FileFilter:=\\\"CSV文件(*.csv)

    2024年02月13日
    浏览(38)
  • python爬虫——保存数据为.csv文件

    1、导包 2、创建或打开文件,设置文件形式 3、设置列名 4、创建DictWriter对象 5、写入表头 6、数据写入 使用writerow方法写入行数据        

    2024年02月11日
    浏览(41)
  • <VB.net>下CSV文件的导入(读取到DataGridView)和导出(DataGirdView保存到csv)

    VB.net项目主要使用微软旗下的Visual Studio 2022编辑器来进行,打开VS2022.新建一个VB.net窗体项目,保存。 然后在窗体上添加以下控件: DataGridView(数据表格控件)、Label(标签控件)、ContextMenuStrip(右键关联菜单控件)等 然后,设置DataGridView控件的contextmenustrip属性(关联到添

    2024年02月05日
    浏览(70)
  • python采集数据保存csv, 文件内容乱码了怎么解决?

    如果你的 Python 程序采集到的数据在保存成 CSV 格式的文件时出现了乱码,那么可尝试以下解决方法: 1. 在打开 CSV 文件时指定编码方式 你可以使用 Python 中的 open() 函数打开 CSV 文件,并在 open() 函数中指定文件编码方式为 CSV 文件原始编码方式。如果 CSV 文件原始编码方式为

    2024年02月16日
    浏览(44)
  • python爬取招聘网信息并保存为csv文件

    我们以猎聘网为例 一、打开网站查找信息 进入后搜索想要爬取的岗位信息,右键选择 “检查” 进入开发者界面 点击右上角的network,选择doc 然后点击图中的搜索按钮,输入想要爬取的岗位名称,然后刷新页面,选择搜索下边的第二个 这个时候我们看到有我们需要的url,从

    2024年02月09日
    浏览(39)
  • chatgpt赋能python:Python如何保存数据到CSV文件中

    作为一门广泛应用于数据分析和机器学习的编程语言,Python提供了许多方法来处理和保存数据。其中之一是将数据保存到CSV文件中。本篇文章将介绍如何使用Python保存数据到CSV文件,在此过程中,我们会提到一些有用的Python库和技巧。 CSV是“逗号分隔值”(Comma-Separated Valu

    2024年02月10日
    浏览(46)
  • Python对csv文件一键多值保存为json本地文件再读取加速效率(3)

    🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:一晌小贪欢的博客主页 👍 该系列文章专栏:Python办公自动化专栏 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏 ❤️ 欢迎各位佬关注! ❤️ 1、给我一张表格直

    2024年02月11日
    浏览(131)
  • 〖Python网络爬虫实战⑲〗- 数据存储之CSV文件

    订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000+                  python项目实战                  Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付费专栏,

    2024年02月01日
    浏览(38)
  • ROS系列——提取bag文件中的数据并保存为csv、txt格式

    实际应用中经常会用到将bag包中的topic数据,保存到csv文件或者txt文件下,然后在对数据进行分析。 其中:为bag文件名,为ros中的Topic名称,为要保存的csv文件名 举例: 其实与csv格式基本一样,只需要修改后缀即可 举例: 注:感谢吕博士提供的支持

    2024年02月14日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包