Language/C#

1

비비이잉 2022. 5. 9. 16:08
반응형
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Markdig;
using System.IO;
using System.Text.RegularExpressions;
using System.Data;
using System.Linq;
using System.Net;
using System.Diagnostics;
using Excel = Microsoft.Office.Interop.Excel;
using System.Xml;

namespace AVIDefectImageReview
{

    public partial class ReportForm : Form
    {
        private List<float> height_list = new List<float>();

        private string readvalue_no;
        private DataRow dr;
        private DataRow dr_height;
        private int offset;
        private DataTable dt;
        private DataTable dt_height;
        private Tuple<int, int> Col_Row;
        private struct HeightInfo
        {
            public int size { get; set; }
            public List<Field> fields { get; set; }

            public struct Field
            {
                public string name { get; set; }
                public int offset { get; set; }
                public int type { get; set; }
            }
        }
        private HeightInfo heightInfo = new HeightInfo();
        private const string KEY_SIZE = "Size";
        private const string KEY_NAME = "Name";
        private const string KEY_OFFSET = "Offset";
        private const string KEY_VARTYPE = "Vartype";

        public ReportForm()
        {
            InitializeComponent();
            CenterToScreen();
            dt = new DataTable();
            dt.Columns.Add("zone", typeof(long));
            dt.Columns.Add("x", typeof(float));
            dt.Columns.Add("y", typeof(float));
            dt.Columns.Add("ActualX", typeof(float));
            dt.Columns.Add("ActualY", typeof(float));
            dt.Columns.Add("id", typeof(int));
            dt.Columns.Add("height", typeof(float));
            dt.Columns.Add("Col", typeof(float));
            dt.Columns.Add("Row", typeof(float));
            dt.Columns.Add("intCOl", typeof(int));
            dt.Columns.Add("intRow", typeof(int));


            string mdfile = $"{Properties.Settings.Default.HttpURL}:{Properties.Settings.Default.HttpURLPort}/review/images/T092292A/01/s_Height.dat.md";
            string datfile = $"{Properties.Settings.Default.HttpURL}:{Properties.Settings.Default.HttpURLPort}/review/images/T092292A/01/s_Height.dat";
            /*
            Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();
            //download .md file .dat file
            using (WebClient client = new WebClient())
            {
                client.DownloadFile(mdfile, @"C:/Users/raine/Desktop/s_Height_Test.dat.md");
                client.DownloadFile(datfile, @"C:/Users/raine/Desktop/s_Height_Test.dat");

            }
            stopwatch.Stop();
            Console.WriteLine("Download : " + stopwatch.ElapsedMilliseconds + "ms");

            Stopwatch stopwatch2 = new Stopwatch();
            stopwatch2.Start();
            */
            string url = "C:/Users/raine/Desktop/s_Height_Test.dat.md";
            StreamReader SR = new System.IO.StreamReader(File.Open(url, FileMode.Open));
            string md = SR.ReadToEnd();
            setMDStruct(md);



            using (WebClient client = new WebClient())
            {
                byte[] dataArray;
                dataArray = client.DownloadData(datfile);

            }

            byte[] rbuff = new byte[28];
            
            BinaryReader br = new BinaryReader(fileStream, System.Text.Encoding.UTF8);
            for (int i = 0; i < br.BaseStream.Length / 28; i++)
            {
                dr = dt.NewRow();
                    
                br.Read(rbuff, 0, rbuff.Length); //28바이트를 다 읽은거

                if (BitConverter.IsLittleEndian)
                {
                    Array.Reverse(rbuff);
                }

                string readvalue = BitConverter.ToString(rbuff, 0);

                readvalue_no = readvalue.Replace("-", "");

                for (int j = 0; j < 7; j++)
                {

                    if (5 - j < 0)
                        offset = 4;
                    else
                        offset = parts_real[6 - j] - parts_real[5 - j]; //offset 이 0 4 8 12 16 20 24 

                    covert_to_var_type(vartype_real[6 - j], offset, j); // vartype 이 17 4 4 4 3 4 

                        
                }
                dt.Rows.Add(dr);
            }
            Stopwatch stopwatch3 = new Stopwatch();
            stopwatch3.Start();
            metroGridWaferReview.DataSource = dt;
            Console.WriteLine($"dt.count :: {dt.Rows.Count}");
            using (StreamWriter outputFile = new StreamWriter(@"C:/Users/raine/Desktop/ColRow.txt"))
            {
                for(int i=0; i<dt.Rows.Count; i++)
                {
                    outputFile.WriteLine($"{dt.Rows[i][9]} {dt.Rows[i][10]}");
                }
            }

            stopwatch3.Stop();
            Console.WriteLine("Datagridview  : " + stopwatch3.ElapsedMilliseconds + "ms");
               

            metroGridWaferReview.Columns[0].HeaderText = "Zone";
            metroGridWaferReview.Columns[1].HeaderText = "X";
            metroGridWaferReview.Columns[2].HeaderText = "Y";
            metroGridWaferReview.Columns[3].HeaderText = "ActualX";
            metroGridWaferReview.Columns[4].HeaderText = "ActualY";
            metroGridWaferReview.Columns[5].HeaderText = "id";
            metroGridWaferReview.Columns[6].HeaderText = "height";
            metroGridWaferReview.Focus();

            br.Close();

            var results = height_list.Distinct();


            
            


        }
        private void covert_to_var_type(int vartype, int offset, int j)
        {

            if (vartype == 17)
            {
                string value = readvalue_no.Substring(8 * j, offset * 2);
                uint num = uint.Parse(value, System.Globalization.NumberStyles.AllowHexSpecifier);
                byte[] floatVals = BitConverter.GetBytes(num);
                ulong f = BitConverter.ToUInt32(floatVals, 0);
                dr[6 - j] = f;

            }
            if (vartype == 3)
            {
                string value = readvalue_no.Substring(8 * j, offset * 2);
                uint num = uint.Parse(value, System.Globalization.NumberStyles.AllowHexSpecifier);
                byte[] floatVals = BitConverter.GetBytes(num);
                int f = BitConverter.ToInt32(floatVals, 0);
                dr[6 - j] = f;   
            }
            else
            {
                if (j == 6)
                    return;
                string value = readvalue_no.Substring(8 * j, offset * 2);
                uint num = uint.Parse(value, System.Globalization.NumberStyles.AllowHexSpecifier);
                byte[] floatVals = BitConverter.GetBytes(num);
                float f = BitConverter.ToSingle(floatVals, 0);
                dr[6 - j] = f;
                if (j == 3)
                {
                    dr[7] = f / 5469.9;
                    dr[9] = Math.Truncate(f / 5469.9); 
                }
                if (j == 4)
                {
                    dr[8] = f / 5470;
                    dr[10] = Math.Truncate(f / 5470);
                }
                    
                
            }
            
                
  
        }

        private void setMDStruct(string md)
        {
            heightInfo = new HeightInfo();
            heightInfo.fields = new List<HeightInfo.Field>();

            HeightInfo.Field field = new HeightInfo.Field();

           
            foreach (string keyValue in getFieldList(md))
            {
                string key = keyValue.Split('=')[0];
                string value = getValue(keyValue.Split('=')[1]);

                switch (key)
                {
                    case KEY_SIZE:
                        heightInfo.size = int.Parse(value);
                        break;

                    case KEY_NAME:
                        field.name = value;
                        break;

                    case KEY_OFFSET:
                        field.offset = int.Parse(value);
                        break;

                    case KEY_VARTYPE:
                        field.type = int.Parse(value);
                        heightInfo.fields.Add(field);
                        break;
                }
            }
        }
        private string getValue(string src)
        {
            return src.Substring(src.IndexOf('"') + 1, src.LastIndexOf('"') - 1);
        }
        private List<string> getFieldList(string md)
        {
            List<string> list = new List<string>();

            foreach (string field in md.Split(' '))
            {
                if (field.Contains("="))
                    list.Add(field);
            }
            return list;
        }

    }






    
}
반응형

'Language > C#' 카테고리의 다른 글

C# height Histogram  (0) 2022.05.17
struct list 수정 불가  (0) 2022.05.16
C#  (0) 2022.05.09
C# 정규표현식  (0) 2022.04.29
.md .dat  (0) 2022.04.29