c# 对txt文件的读取与写入

2023-11-07

C# txt文件分析 读取与写入

c#中对txt文件的读取写入在工作中用到的很多,今天写一个之前工作中用到的小demo~
案例场景要求:
txt文件中为很多条标记时间戳的报文,需要计算出每条报文从开始接收到结束用了多长时间
案例执行:
如txt文件中只有少量的报文可直接手动计算,但当txt中存在大量的数据时写一个小程序让其自动执行更高效。以下案例中,实现过程:点击加载按钮将所需要执行的文件夹路径加载进来,然后点击文件分析,即可自动执行分析txt文件,并将所有计算出来的时间差重新保存写入一个新的文件。
其中因在txt文件中存在空白行,所以代码中对空白行进行了判断。
注:本文中用到的测试文件为串口助手保存的报文文件。
运行截图:
运行图一
运行图二
测试文件:
测试文件图
新生成的时间差文件:
在这里插入图片描述
实现过程代码:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            label3.Visible = false;
        }
        string FilePath;
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog SelectTxtDialog = new OpenFileDialog();
            if (SelectTxtDialog.ShowDialog(this) == DialogResult.OK)
            {
                FilePath = Path.GetFullPath(SelectTxtDialog.FileName);
                textBox1.Text = FilePath;
            }
        }
        private void Readdata()
        {
            bool getTime = false;
            StreamReader strFile = new StreamReader(FilePath);
            string line;
            DateTime t1 = DateTime.MinValue;
            string date1 = "", date2;
            line = strFile.ReadLine();
            date1 = check(line);
            t1 = GetDateTime(date1);
            while (!strFile.EndOfStream)
            {
                if (getTime == true)
                {
                    getTime = false;
                    line = strFile.ReadLine();
                    date1 = check(line);
                    t1 = GetDateTime(date1);
                }
                line = strFile.ReadLine();
                if (line.Contains("&BE01"))//以报文检验码为结束点进行判断
                {

                    date2 = check(line);
                    DateTime t2 = GetDateTime(date2);
                    System.TimeSpan t3 = t2 - t1;
                    SaveFile(t3.ToString(), date1, date2);
                }
                if (line == null || line == "")//判断当前行是否为空
                {
                    getTime = true;
                } 
            }
            strFile.Close();
            textBox2.Text = newTxtPath;
            label3.Text = "分析完成!";
            label3.Visible = true;
        }
        public DateTime GetDateTime(string dateTime)
        {
            string[] strArr = dateTime.Split(new char[] { '-', ' ', ':', ',', ':' });
            DateTime dt = new DateTime(int.Parse(strArr[0]),
                int.Parse(strArr[1]),
                int.Parse(strArr[2]),
                int.Parse(strArr[3]),
                int.Parse(strArr[4]),
                int.Parse(strArr[5]),
                int.Parse(strArr[6]));
            return dt;
        }
        public string check(string s)
        {
            Regex reg2 = new Regex(@"(20[012]\d-[01]\d-[0123]\d\s\d\d:\d\d:\d\d:\d\d\d)");
            MatchCollection matches = reg2.Matches(s);
            string line = "";
            if (matches.Count >= 1)
            {
                line = matches[0].Value;
            }
            return line;
        }
        string newTxtPath;
        public void SaveFile(string ss, string d1, string d2)
        {
            string mpath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Data", "时间差保存");//保存文件路径
            if (!Directory.Exists(mpath))
                Directory.CreateDirectory(mpath);
            string fileName = @"\" + DateTime.Now.ToString("yyyyMMddHHmm") + "时间差保存.txt";
            newTxtPath = mpath + fileName;
            StreamWriter sw2 = new StreamWriter(newTxtPath, true, Encoding.UTF8);//实例化StreamWriter;//true表示允许追加     
            sw2.WriteLine(ss + "\t" + d1 + "\t" + d2);
            sw2.Flush();
            sw2.Dispose();
            sw2.Close();            
        }
        private void btnAnalyse_Click(object sender, EventArgs e)
        {
            Readdata();
        }
    }

可自行新建一个txt文件 将报文拷入文件 并复制粘贴多个此报文 即可测试
报文如下:
【2021-12-29 09:20:51:192】##0457ST=22;CN=2011;PW=1111;MN=21030016;CP=&&DataTime=20211229092032;pmACT-Rtd=8.3,pmACT-Flag=N;
【2021-12-29 09:20:51:242】pmSTD-Rtd=8.7,pmSTD-Flag=N;temperature-Rtd=16.1,temperature-Flag=N;humidity-Rtd=14.0,humidity-Fl
【2021-12-29 09:20:51:292】ag=N;atmosphere-Rtd=1021,atmosphere-Flag=N;flow-Rtd=16.63,flow-Flag=N;pttemp-Rtd=36.6,pttemp-Fla
【2021-12-29 09:20:51:342】g=N;cygtemp-Rtd=39.3,cygtemp-Flag=N;jxtemp-Rtd=18.8,jxtemp-Flag=N;yqtemp-Rtd=25.1,yqtemp-Flag=N;
【2021-12-29 09:20:51:392】inter-pressure-Rtd=859,inter-pressure-Flag=N;iampleRH-Rtd=2.2,iampleRH-Flag=N&&BE01

【2021-12-29 09:20:59:882】##0457ST=22;CN=2011;PW=1111;MN=21030016;CP=&&DataTime=20211229092041;pmACT-Rtd=8.3,pmACT-Flag=N;
【2021-12-29 09:20:59:882】pmSTD-Rt
【2021-12-29 09:20:59:932】d=8.7,pmSTD-Flag=N;temperature-Rtd=16.1,temperature-Flag=N;humidity-Rtd=14.0,humidity-Fl
【2021-12-29 09:20:59:932】ag=N;atm
【2021-12-29 09:20:59:982】osphere-Rtd=1021,atmosphere-Flag=N;flow-Rtd=16.65,flow-Flag=N;pttemp-Rtd=37.0,pttemp-Fla
【2021-12-29 09:20:59:982】g=N;cygt
【2021-12-29 09:21:00:032】emp-Rtd=39.2,cygtemp-Flag=N;jxtemp-Rtd=18.8,jxtemp-Flag=N;yqtemp-Rtd=25.1,yqtemp-Flag=N;
【2021-12-29 09:21:00:032】inter-pr
【2021-12-29 09:21:00:082】essure-Rtd=859,inter-pressure-Flag=N;iampleRH-Rtd=2.3,iampleRH-Flag=N&&BE01

【2021-12-29 09:21:08:569】##0457ST=22;CN=2011;PW=1111;MN=21030016;CP=&&DataTime=20211229092049;pmACT-Rtd=8.3,pmACT-Flag=N;
【2021-12-29 09:21:08:619】pmSTD-Rtd=8.7,pmSTD-Flag=N;temperature-Rtd=16.1,temperature-Flag=N;humidity-Rtd=14.0,humidity-Fl
【2021-12-29 09:21:08:669】ag=N;atmosphere-Rtd=1021,atmosphere-Flag=N;flow-Rtd=16.65,flow-Flag=N;pttemp-Rtd=36.6,pttemp-Fla
【2021-12-29 09:21:08:719】g=N;cygtemp-Rtd=39.4,cygtemp-Flag=N;jxtemp-Rtd=18.9,jxtemp-Flag=N;yqtemp-Rtd=25.0,yqtemp-Flag=N;
【2021-12-29 09:21:08:769】inter-pressure-Rtd=859,inter-pressure-Flag=N;iampleRH-Rtd=2.3,iampleRH-Flag=N&&BE01

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c# 对txt文件的读取与写入 的相关文章

  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • SqlServer的varchar最大长度

    SqlServer的varchar最大长度是8000 总会遇到这种字符串截断问题 但是在给表字段长度添加时最好还是不要添加为max 能用varchar n 的话就不必要去要求varchar max 性能问题 项目上确实出现过问题 这个博主的
  • 1115 裁判机

    1114 全素日 有一种数字游戏的规则如下 首先由裁判给定两个不同的正整数 然后参加游戏的几个人轮流给出正整数 要求给出的数字必须是前面已经出现的某两个正整数之差 且不能等于之前的任何一个数 游戏一直持续若干轮 中间有写重复或写错的人就出局
  • python数据分析:用户消费情况数据分析

    本次分析数据介绍 数据为某奶茶店2018年1月 2019年6月的销售数据 共计69 659项数据 用户共计23 570名 数据集共4个字段 user id 用户id order id 购买日期 order prodect 购买产品数 ord
  • 为什么java中类名要与文件名一致

    学习java程序过程中碰到了文件名与类名不一致问题 出现了报错 后面查了一下资料才知道为什么文件名与类名要一致 Java是被解释执行的 它在运行时并不是将所有的class文件全都放到内存中 而是在遇到import的时候才去相应的文件目录找相
  • 概率论与数理统计(3)--指数分布函数及其期望、方差

    1 什么是指数分布 设随机变量X具有如下形式的密度函数 那么则称X服从参数为 的指数分布 记为X EXP 指数分布的分布函数为 2 指数分布的期望和方差 数学期望 如果X 服从参数为 gt 0 的指数分布 那么指数分布X EXP 的数学期望
  • Conda 常用指令 (Mac)【下载 安装 环境配置 查看 创建 激活 配置cuda 拷贝环境】

    本文旨在介绍用conda配置一个新的深度学习环境的全过程 下载Anaconda 在 官网 中下载与python版本匹配的Anaconda Python与Anaconda版本匹配如下 图片源自 该博客 在本例中我下载的 Anaconda3 2
  • 12篇顶会论文,深度学习时间序列预测经典方案汇总

    早期的时间序列预测主要模型是诸如ARIMA这样的单序列线性模型 这种模型对每个序列分别进行拟合 在ARIMA的基础上 又提出了引入非线性 引入外部特征等的优化 然而 ARIMA类模型在处理大规模时间序列时效率较低 并且由于每个序列分别独立拟
  • aistudio提示找不到包,通过直接下载整个PaddleNLP的repo文件执行

    git clone https gitee com AI Mart PaddleNLP cd PaddleNLP python setup py install pip install regex nltk beautifulsoup4 当
  • mysql 同步失败_线上MYSQL同步报错故障处理方法总结

    前言 在发生故障切换后 经常遇到的问题就是同步报错 下面是最近收集的报错信息 记录删除失败 在master上删除一条记录 而slave上找不到 Last SQL Error Could not execute Delete rows eve
  • C语言执行过程

    系列1 C语言执行过程 系列2 C程序方法调用 系列3 CS IP 寄存器 本文中涉及的代码地址 analyseExecutionOfC 文件结构 analyse execution of c compilePreProcessSource
  • [失败] 网易云音乐爬虫分析

    网易云音乐js破解分析 大家好 我是W 最近在搞毕设相关的材料 所以很久没有敲代码和写博客了 刚好 一个同学有个需求 要获取网易云音乐的歌曲id和封面地址 然后用外链播放 相当于在他的系统里加一个小功能 锦上添花 所以来找到我 刚开始我觉得
  • module xxx has no attribute

    授人以鱼不如授人以渔 希望这篇文章可以帮助大家解决一系列类似的问题 大家耐心看下去 肯定会有收获 今天看见一篇博客解决问题的思路给了我很大的启发 于是我就将他记录下来 大家可以一起学习一下 在文章的最后我也会挂出他的链接 这里具体为具体错误
  • Python操作SQL中json格式的问题

    1 json中的引号必须使用双引号 在mysql中双引号和单引号可以互换 但不可混合使用 需成对出现 mysql支持存储json格式数据 但是写入时json内容中引号必须使用双引号 否则出现下述错误 pymysql err Operatio
  • 超分辨率基础

    超分辨率综述 Image Super resolution 的深度学习方法 微信二维码引擎OpenCV开源 微信扫码背后的图像超分辨率技术 技术解析 即构移动端超分辨率技术 DIV2K数据集下载 B100 Manga109 Set5 Set
  • firefly框架分析之netconnect package(一)

    firefly下的目录结构如下 里面的各个包将会一一的介绍 今天先开始看看netconnect包 该包下面这些模块从connection开始 Connection py 与客户端的连接对象 通过其与客户端通讯 向客户端发送封装过的数据 还可
  • Qt源码解析1---D指针原理

    D指针 什么是d指针 如果你已经看过到Qt源文件像QLablel QPicture QLabel picture const Q D const QLabel if d gt picture return d gt picture retu
  • ChatGPT的接口在哪

    ChatGPT本身不是一个独立的接口 而是一个预训练的自然语言处理模型 如果您需要使用ChatGPT来实现某个自然语言处理任务 例如文本生成 问答等 您可以使用Python中的深度学习框架 如TensorFlow PyTorch 加载预训练
  • 谈我对于ajax的理解

    Ajax的全称是Asynchronous JavaScript and XML 中文名称定义为异步的JavaScript和XML Ajax是Web2 0技术的核心由多种技术集合而成 使用Ajax技术不必刷新整个页面 只需对页面的局部进行更新
  • qt 信号槽默认参数 toggled 和 trigger的区别

    toggled和trigger区别 1 toggle 类似开关 具有2个状态 打开 关闭 使用这个信号 是在这2个状态之间切换 2 trigger是一次性的 点击后 无法改变状态 要么是打开 要么是关闭 参考 http blog csdn
  • c# 对txt文件的读取与写入

    C txt文件分析 读取与写入 c 中对txt文件的读取写入在工作中用到的很多 今天写一个之前工作中用到的小demo 案例场景要求 txt文件中为很多条标记时间戳的报文 需要计算出每条报文从开始接收到结束用了多长时间 案例执行 如txt文件