• C#读取主从文件的excel并把结果为pass的文件打包


    主入口

    static void Main(string[] args)
    {
    TestingDataChecker dataChecker = new TestingDataChecker("IBW087NB", new DateTime(2021, 5, 11), "IBW087NB-10000020");
    var r = dataChecker.Check("IBW087NB-1005210016");
    var r1 = dataChecker.Check("IBW087NB-1005210017");
    if (r.Success)
    {
    dataChecker.Packing("IBW087NB-10000020");
    }
    }

    TestingDataChecker.cs

     public class TestingDataChecker
        {
            public TestingDataChecker(string project,DateTime date, string name)
            {
                Project = project; 
                Filename = name;  //DateTime.Now.ToLocalTime().ToString().Replace(":","").Replace(" ","").Replace("/","");
                OringalTestingTotalResult = LoadTotalResult();
                EnsureOutputPath();
                //ResultColumns = new string[] { "OV_Result", "COV1_Result", "CUV1_Result", "OCCHG1_Result", "OCDSG1_Result", "NormalSCC_Result", "IRN_Result", "THR_Result" };
                ResultColumns = new string[] { "Result"};
            }
            string TestingResultRoot
            {
                get
                {
                    return @"D:smt";
                }
            }
    
            string TestingTotalResultFile { get; set; }
            string OutPutPath
            {
                get
                {
                    return "SMTCheck";
                }
            }
    
            string Project { get; set; }
    
            string Filename { get; set; }
    
            DataTable OringalTestingTotalResult
            {
                get; set;
            }
            DataTable OutputTestingTotalResult
            {
                get; set;
            }
    
            string[] ResultColumns
            {
                get;set;
            }
    
            void EnsureOutputPath()
            {
                var target = Path.Combine(OutPutPath + "\" + Filename, Filename);
                if (!Directory.Exists(target))
                {
                    Directory.CreateDirectory(target);
                }
                OutputTestingTotalResult = OringalTestingTotalResult.Clone();
    
                var totalfile = Path.Combine(OutPutPath + "\" + Filename, new FileInfo(TestingTotalResultFile).Name.Replace("csv", "xlsx"));  //.Replace("csv","xlsx")
                
                var path1 = string.Format("{0}*.xlsx", "20210511_IBW087NB");
                var pathname = Path.Combine(OutPutPath + "\" + Filename);
                var files = Directory.GetFiles(pathname, path1);
    
                if (files.Length > 0)  //判断文件是否已经存在,存在的话先把已有的记录存下来
                {
                    ExcelHelper excel = new ExcelHelper();
                    var table = excel.Read(files[0]);  
                    OutputTestingTotalResult = table;
                }
                else
                {
                    OutputTestingTotalResult = OringalTestingTotalResult.Clone();
                } 
    
            }
    
            
    
            DataTable LoadTotalResult()
            {
                string sDir = @"D:\smt";
                //var sDir = string.Format("{0}_{1}*.csv", Date, Project);
                DirectoryInfo di = new DirectoryInfo(sDir);
                var CreationTime = DateTime.Now.AddDays(-10000);
                foreach (FileInfo fi in di.GetFiles("20210511_IBW087NB*.csv"))
                {
                    var a = fi.Name;
                    var b = fi.CreationTime;
                }
    
                var path = string.Format("{0}\{1}.csv", "D:\smt", "20210511_IBW087NB-PCM-R0-2021-4-14");
                if (path.Length > 0)
                {
                    DataTable table = CSVFileHelper.OpenCSV(path);
                    TestingTotalResultFile = path;
                    //ExcelHelper excel = new ExcelHelper();
                    //var table = excel.Read(files[0]);
                    return table;
                }
                else
                    throw new Exception("无法找到主文件");
            }
    
            public JeffSoft.OperationResult Check(string sn)
            {
                var result = new JeffSoft.OperationResult(); 
                //var newsn="""+sn+ "	""; //发现文件中记录的数据后面有	,不加的话查不到。
                var newsn =   sn + "	"; //发现文件中记录的数据后面有	,不加的话查不到。
                //var rows=OringalTestingTotalResult.Select("barcode='" + newsn + "'", "StartTime desc");
                var rows = OringalTestingTotalResult.Select("barcode like '%" + newsn + "%'", "StartTime desc");
                if (rows.Length > 0)
                {
                    bool flag = true;
                    foreach (var c in ResultColumns)
                    {
                        if (rows[0][c].ToString() != "Pass")
                        {
                            flag = false;
                            break;
                        }
                    }
                    if (flag)
                    {
                        OutputTestingTotalResult.Rows.Add(rows[0].ItemArray);
                        var starttime = Convert.ToDateTime(rows[0]["StartTime"]);
                        var subfile = string.Format("{0}_{1}_{2}*.xls",sn, starttime.ToString("yyyy-MM-dd"), starttime.ToString("HHmm"));
                        var files = Directory.GetFiles(Path.Combine(TestingResultRoot, "sub"), subfile);
                        if (files.Length > 0)
                        {
                            File.Copy(files[0], Path.Combine(OutPutPath + "\" + Filename, Filename, new FileInfo(files[0]).Name),true);
                        }
                        else
                            result.Errors.Add("找不到子文件:" + subfile);
                    }
                    else
                        result.Errors.Add("存在不通过的检查项");
                }
                else
                    result.Errors.Add("主文件中找不到指定的条码");
                return result;
            }
    
            /// <summary>
            /// 将生成的文件压缩成一个文件方便发送
            /// </summary>
            public string Packing(string sn)
            {
                ExcelHelper helper = new ExcelHelper();
                helper.DataSource = OutputTestingTotalResult;
                var tmp=helper.Export();
    
                var totalfile = Path.Combine(OutPutPath + "\" + Filename, new FileInfo(TestingTotalResultFile).Name.Replace("csv", "xlsx"));  //.Replace("csv","xlsx")
                File.Copy(tmp, totalfile,true);  
                
                List<string> files = new List<string>();
                List<string> zipfiles = new List<string>();
                files.Add(new FileInfo(totalfile).FullName);
                var subfiles = Directory.GetFiles(Path.Combine(OutPutPath + "\" + Filename, Filename));
                foreach(var s in subfiles)
                {
                    files.Add(new FileInfo(s).FullName);
                }
                foreach(var f in files)
                {
                    zipfiles.Add(f.Replace(new DirectoryInfo(OutPutPath + "\" + Filename).FullName,""));
                }
                JeffSoft.Compress compress = new JeffSoft.Compress();
                string zippath = Path.Combine(OutPutPath + "\" + Filename, string.Format("{0}.zip", Filename));
                compress.CompressFile(files.ToArray(),zippath, zipfiles.ToArray());
                return zippath;
            }
        }
    TestingDataChecker

    拓展:给定文件的路径,读取文件的二进制数据,判断文件的编码类型

    internal class Common
        {
            /// 给定文件的路径,读取文件的二进制数据,判断文件的编码类型
            /// <param name="FILE_NAME">文件路径</param>
            /// <returns>文件的编码类型</returns>
    
            public static System.Text.Encoding GetType(string FILE_NAME)
            {
                System.IO.FileStream fs = new System.IO.FileStream(FILE_NAME, System.IO.FileMode.Open,
                    System.IO.FileAccess.Read);
                System.Text.Encoding r = GetType(fs);
                fs.Close();
                return r;
            }
    
            /// 通过给定的文件流,判断文件的编码类型
            /// <param name="fs">文件流</param>
            /// <returns>文件的编码类型</returns>
            public static System.Text.Encoding GetType(System.IO.FileStream fs)
            {
                byte[] Unicode = new byte[] { 0xFF, 0xFE, 0x41 };
                byte[] UnicodeBIG = new byte[] { 0xFE, 0xFF, 0x00 };
                byte[] UTF8 = new byte[] { 0xEF, 0xBB, 0xBF }; //带BOM
                System.Text.Encoding reVal = System.Text.Encoding.Default;
    
                System.IO.BinaryReader r = new System.IO.BinaryReader(fs, System.Text.Encoding.Default);
                int i;
                int.TryParse(fs.Length.ToString(), out i);
                byte[] ss = r.ReadBytes(i);
                if (IsUTF8Bytes(ss) || (ss[0] == 0xEF && ss[1] == 0xBB && ss[2] == 0xBF))
                {
                    reVal = System.Text.Encoding.UTF8;
                }
                else if (ss[0] == 0xFE && ss[1] == 0xFF && ss[2] == 0x00)
                {
                    reVal = System.Text.Encoding.BigEndianUnicode;
                }
                else if (ss[0] == 0xFF && ss[1] == 0xFE && ss[2] == 0x41)
                {
                    reVal = System.Text.Encoding.Unicode;
                }
                r.Close();
                return reVal;
            }
    
            /// 判断是否是不带 BOM 的 UTF8 格式
            /// <param name="data"></param>
            /// <returns></returns>
            private static bool IsUTF8Bytes(byte[] data)
            {
                int charByteCounter = 1;  //计算当前正分析的字符应还有的字节数
                byte curByte; //当前分析的字节.
                for (int i = 0; i < data.Length; i++)
                {
                    curByte = data[i];
                    if (charByteCounter == 1)
                    {
                        if (curByte >= 0x80)
                        {
                            //判断当前
                            while (((curByte <<= 1) & 0x80) != 0)
                            {
                                charByteCounter++;
                            }
                            //标记位首位若为非0 则至少以2个1开始 如:110XXXXX...........1111110X 
                            if (charByteCounter == 1 || charByteCounter > 6)
                            {
                                return false;
                            }
                        }
                    }
                    else
                    {
                        //若是UTF-8 此时第一位必须为1
                        if ((curByte & 0xC0) != 0x80)
                        {
                            return false;
                        }
                        charByteCounter--;
                    }
                }
                if (charByteCounter > 1)
                {
                     
                }
                return true;
            }
        }
    Common.cs
  • 相关阅读:
    c语言中编写标准身高体重对照表
    c语言实现约数的枚举
    c语言中循环输出1234567890
    c语言中为九九乘法增加横纵标题
    c语言中多重循环
    c语言中绘制金字塔
    c语言中双重循环
    c语言中绘制长方形
    当当网代码1
    当当网代码4
  • 原文地址:https://www.cnblogs.com/Depingblogs/p/15010847.html
Copyright © 2020-2023  润新知