C#对.txt文件的监控处理,解析案例

tech2022-09-18  97

需要对一个txt文件进行解析

实现后截图 要求:拿到D盘下该文件D:\RhData\result.txt,对其进行解析,文件会发生改变,需要对该文件进行实时监控,每次改变后需要解析保存并记录,后面把这些解析的数据放到一个List《model》里面,供后面需要时使用

实现后截图

这是result.txt文件 Inspector:;于闯 Workpiece name:;齿毂 TITLE_1:;QE 粗糙度 TITLE_2:;任务: “粗糙度” TITLE_3:; Drawing No.:;764F Comment:; Machining operation:; Meas. record No.:; Department:;QC Machine No.:; Documentation on Duty;- Job No.:; Signature; Standard;- Nominal;- Resolution;- MarWin Version:;10.00-21 Meas. station:;0000 MarCtrl Version:;4.04-00 Export Date/Time:;01.09.20/14:30:31 manufacturing Date/Time:;- Digits:;0 Part Construction Id;- Spindel;- Charge;- Detail;- Name;Datum;Nominal;L_TOL;U_TOL;Value;Unit;Feature;low nat. Border;Type;No.;Date;Time;Operator R_粗糙度_001_Rz;; 0.0000; 0.0000; 0.0000; 0.5813;μm;0;0;9350;1;01.09.20;14:23:45;于闯

我解析文件后首先是放在一个数组里面,然后再存进txt里面。后面list《mode》处理起来挺麻烦的,因为文件格式很不清晰,有些没有对应的数据,比如TITLE_3这种,后面模型的建立就很麻烦。我是自己拿了个解析好的txt文件一个个对数组下标给传值到Model类的。`

using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Text; using System.Threading; namespace Analysis { class Program { //最后一次修改时间 public static string RecordLastModifyDate; //解析文件保存目录 public static string path = @"D:\RhData\AnalysisFile"; //创建List<Model> public static List<Model> modelList = new List<Model>(); static void Main(string[] args) { //初始化文件最后修改时间 initModifyDate(); Thread t = new Thread(new ThreadStart(run)); t.Start(); } /// <summary> /// 对字符串进行解析,返回一个ArrayList /// </summary> /// <returns>返回解析数组</returns> public static ArrayList analysis() { string url = @"D:\RhData\result.txt"; FileInfo fi = new FileInfo(url); StreamReader sr = new StreamReader(url, Encoding.UTF8); string result; ArrayList total = new ArrayList(); //判断文件是否存在 if (fi.Exists) { Console.WriteLine("正在解析result.txt"); //ASCII的目前没解决 txt换成了UTF8 //一行一行读 while (!sr.EndOfStream) { result = sr.ReadLine(); if (result.EndsWith(":;-"))//去除带:;-尾 { result = result.Substring(0, result.IndexOf(":;-")); total.Add(result); } else if (result.EndsWith(":;"))//去除带:;尾 { result = result.Substring(0, result.IndexOf(":;")); total.Add(result); } else if (result.EndsWith(";-"))//去除带;-尾 { result = result.Substring(0, result.IndexOf(";-")); total.Add(result); ; } else if (result.EndsWith(";"))//去除带;尾 { result = result.Substring(0, result.IndexOf(";")); total.Add(result); } else if (result.IndexOf(":;") > 0)//分割带有:; { string[] str = result.Split(":;"); foreach (string item in str) total.Add(item); } else {//分割带有; string[] str = result.Split(";"); foreach (string item in str) total.Add(item.Trim()); } } sr.Close(); } else { Console.WriteLine("文件不存在,打开失败"); } return total; } /// <summary> /// 初始化文件修改时间,以及文件保存目录 /// </summary> public static void initModifyDate() { string url = @"D:\RhData\result.txt"; FileInfo fi = new FileInfo(url); RecordLastModifyDate = fi.LastWriteTime.ToString(); Console.WriteLine("初始化保存解析文件目录:"+path); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } } /// <summary> /// 保存解析数据 /// </summary> /// <param name="analysisDate">解析时间字符串</param> /// <param name="analysisArr">解析数组arraylist</param> public static void saveAnalysisFile(string analysisDate,ArrayList analysisArr) { string url = @path+"/" + analysisDate+".txt"; FileStream fs = new FileStream(url,FileMode.Create,FileAccess.Write); StreamWriter sw = new StreamWriter(fs); foreach (string item in analysisArr) { sw.WriteLine(item); } sw.Flush(); sw.Close(); fs.Close(); //转换模型,并加入ListModel modelList.Add(arrToModel(analysisArr)); } /// <summary> /// 启动线程 /// </summary> public static void run() { Console.WriteLine("初始化result.txt上次修改时间:"+RecordLastModifyDate+"\n开始监控.........") ; while (true) { Thread.Sleep(1000); string url = @"D:\RhData\result.txt"; FileInfo fi = new FileInfo(url); string date = fi.LastWriteTime.ToString(); if (!date.Equals(RecordLastModifyDate)) { Console.WriteLine("内容发生改变,改变时间:"+ RecordLastModifyDate); //首先记录修改时间 RecordLastModifyDate = date; saveAnalysisFile(RecordLastModifyDate.Replace(" ","_").Replace(":","-"), analysis()); Console.WriteLine("解析完成,保存文件,文件名:"+ RecordLastModifyDate.Replace(" ", "_").Replace(":", "-")); Console.WriteLine("预览当前List<Model数据>"); foreach (var item in modelList) { Console.WriteLine(item); } } else { Console.WriteLine("继续监控,没有改变"); } } } /// <summary> /// 将解析到的数组转换成model对象 /// </summary> /// <param name="arr">解析数组</param> /// <returns>model对象</returns> public static Model arrToModel( ArrayList arr) { Model model = new Model(); if (arr.Count == 66) { model.Inspector = (string)arr[1]; model.WorkpieceName = (string)arr[3]; model.TITLE_1 = (string)arr[5]; model.TITLE_2 = (string)arr[7]; model.TITLE_3 = null; model.DrawingNo_ = (string)arr[10]; model.Comment = (string)arr[12]; model.Meas_Record_NO_ = null; model.Department = (string)arr[15]; model.MachineNo = null; model.DocumentationOnDuty = null; model.JobNo_ = null; model.Signature = null; model.Standard = null; model.Nominal = null; model.Resolution = null; model.MarWinVersion = (string)arr[24]; model.Meas_Station = (string)arr[26]; model.MarCtrlVersion = (string)arr[28]; model.ExportDateTime = (string)arr[30]; model.ManufacturingDateTime = null; model.Digits = (string)arr[33]; model.PartConstructionId = null; model.Spindel = null; model.Charge = null; model.Detail = null; model.Name = (string)arr[52]; model.Datum = (string)arr[53]; model.Nominal2 = (string)arr[54]; model.L_TOL = (string)arr[55]; model.U_TOL = (string)arr[56]; model.Value = (string)arr[57]; model.Unit = (string)arr[58]; model.Feature = (string)arr[59]; model.LowNatBorder = (string)arr[60]; model.Type = (string)arr[61]; model.No_ = (string)arr[62]; model.Date = (string)arr[63]; model.Time = (string)arr[64]; model.Operator = (string)arr[65]; } else { return null; } return model; } } }

这是Program.cs的全部代码,还有一个是Model类`

using System; using System.Collections.Generic; using System.Security.Cryptography; using System.Text; namespace Analysis { public class Model { public string Inspector{ get; set; } public string WorkpieceName { get; set; } public string TITLE_1 { get; set; } public string TITLE_2 { get; set; } public string TITLE_3{ get; set; } public string DrawingNo_ { get; set; } public string Comment { get; set; } public string Meas_Record_NO_ { get; set; } public string Department { get; set; } public string MachineNo { get; set; } public string DocumentationOnDuty { get; set; } public string JobNo_ { get; set; } public string Signature { get; set; } public string Standard { get; set; } public string Nominal { get; set; } public string Resolution { get; set; } public string MarWinVersion { get; set; } public string Meas_Station { get; set; } public string MarCtrlVersion { get; set; } public string ExportDateTime { get; set; } public string ManufacturingDateTime { get; set; } public string Digits { get; set; } public string PartConstructionId { get; set; } public string Spindel { get; set; } public string Charge { get; set; } public string Detail { get; set; } public string Name { get; set; } public string Datum { get; set; } public string Nominal2 { get; set; } public string L_TOL { get; set; } public string U_TOL { get; set; } public string Value { get; set; } public string Unit { get; set; } public string Feature { get; set; } public string LowNatBorder { get; set;} public string Type { get; set; } public string No_ { get; set; } public string Date { get; set; } public string Time { get; set; } public string Operator { get; set; } public override string ToString() { return "[Inspector-"+ Inspector + ",WorkpieceName-"+ WorkpieceName + ",TITLE_1-" + TITLE_1 + ",TITLE_2-" + TITLE_2 + ",TITLE_3-" + TITLE_3 + ",DrawingNo_-" + DrawingNo_ + ",Comment-" + Comment + ",Meas_Record_NO_-" + Meas_Record_NO_ + ",Department-" + Department + ",MachineNo-" + MachineNo + ",DocumentationOnDuty-" + DocumentationOnDuty + ",JobNo_-" + JobNo_ + ",Signature-" + Signature + ",Standard-" + Standard + ",Nominal-" + Nominal + ",Resolution-" + Resolution + ",MarWinVersion-" + MarWinVersion + ",Meas_Station-" + Meas_Station + ",MarCtrlVersion-" + MarCtrlVersion + ",ExportDateTime-" + ExportDateTime + ",ManufacturingDateTime-" + ManufacturingDateTime + ",Digits-" + Digits + ",PartConstructionId-" + PartConstructionId + ",Spindel-" + Spindel + ",Charge-" + Charge + ",Detail-" + Detail + ",Name-" + Name + ",Datum-" + Datum + ",Nominal2-" + Nominal2 + ",L_TOL-" + L_TOL + ",U_TOL-" + U_TOL + ",Value-" + Value + ",Unit-" + Unit + ",Feature-" + Feature + ",LowNatBorder-" + LowNatBorder + ",Type-" + Type + ",No_-" + No_ + ",Date-" + Date + ",Time-" + Time + ",Operator-" + Operator + "]"; } } }
最新回复(0)