반응형
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 |