添加项目文件。
This commit is contained in:
351
CowainHmi/Helper/CsvHelper.cs
Normal file
351
CowainHmi/Helper/CsvHelper.cs
Normal file
@@ -0,0 +1,351 @@
|
||||
using PCHMI;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace CowainHmi
|
||||
{
|
||||
public class CsvHelper
|
||||
{
|
||||
public static void CreateCsv(string filePath, string[] colNames)
|
||||
{
|
||||
try
|
||||
{
|
||||
string directoryName = Path.GetDirectoryName(filePath);
|
||||
if (!Directory.Exists(directoryName) && directoryName.Length > 0)
|
||||
{
|
||||
Directory.CreateDirectory(directoryName);
|
||||
}
|
||||
WriteRow(filePath, colNames.ToList());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
new PClass().WErrTxt("CreateCsv错误:" + ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
public static void WriteRow(string dir, List<string> row)
|
||||
{
|
||||
WriteRow(dir, new List<List<string>> { row });
|
||||
}
|
||||
|
||||
public static void DataTableToCsv(string filePath, DataTable tab)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (tab == null || tab.Rows.Count <= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
List<List<string>> list = new List<List<string>>();
|
||||
string[] array = new string[tab.Columns.Count];
|
||||
List<string> list2 = new List<string>();
|
||||
foreach (DataColumn column in tab.Columns)
|
||||
{
|
||||
list2.Add(column.ColumnName);
|
||||
}
|
||||
|
||||
list.Add(list2);
|
||||
for (int i = 0; i < tab.Rows.Count; i++)
|
||||
{
|
||||
for (int j = 0; j < tab.Columns.Count; j++)
|
||||
{
|
||||
array[j] = tab.Rows[i][j].ToString();
|
||||
}
|
||||
|
||||
list.Add(array.ToList());
|
||||
}
|
||||
|
||||
WriteLines(filePath, list);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
new PClass().WErrTxt("DataTableToCsv错误:" + ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
public static void WriteLine(string dir, List<string> row)
|
||||
{
|
||||
WriteRow(dir, new List<List<string>> { row });
|
||||
}
|
||||
|
||||
public static void WriteLines(string dir, List<List<string>> row)
|
||||
{
|
||||
WriteRow(dir, row);
|
||||
}
|
||||
|
||||
public static void WriteRow(string dir, List<List<string>> row)
|
||||
{
|
||||
try
|
||||
{
|
||||
string text = "";
|
||||
string text2 = "";
|
||||
for (int i = 0; i < row.Count; i++)
|
||||
{
|
||||
text = "";
|
||||
for (int j = 0; j < row[i].Count; j++)
|
||||
{
|
||||
row[i][j] = row[i][j].Replace("\"", "\"\"");
|
||||
if (row[i][j].IndexOf(",") > -1)
|
||||
{
|
||||
row[i][j] = "\"" + row[i][j] + "\"";
|
||||
}
|
||||
|
||||
text = text + row[i][j] + ",";
|
||||
}
|
||||
|
||||
if (text.Substring(text.Length - 1, 1) == ",")
|
||||
{
|
||||
text = text.Remove(text.Length - 1, 1);
|
||||
}
|
||||
|
||||
text2 = text2 + text.TrimEnd(',') + "\r\n";
|
||||
}
|
||||
|
||||
if (text2.Length > 2 && text2.Substring(text2.Length - 2, 2) == "\r\n")
|
||||
{
|
||||
text2 = text2.Remove(text2.Length - 2, 2);
|
||||
}
|
||||
|
||||
WriteTxt(text2, dir);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
new PClass().WErrTxt("WriteRow错误:" + ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
public static void WriteTxt(string str, string URL)
|
||||
{
|
||||
byte[] bytes = Encoding.Default.GetBytes(str + "\r\n");
|
||||
try
|
||||
{
|
||||
FileStream fileStream = File.OpenWrite(URL);
|
||||
fileStream.Position = fileStream.Length;
|
||||
fileStream.Write(bytes, 0, bytes.Length);
|
||||
fileStream.Close();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
new PClass().WErrTxt("WriteTxt错误:" + ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
public List<List<string>> ReadRow(string dir)
|
||||
{
|
||||
List<string> list = new List<string>(File.ReadAllLines(dir));
|
||||
List<List<string>> list2 = new List<List<string>>();
|
||||
for (int i = 0; i < list.Count; i++)
|
||||
{
|
||||
int j = 0;
|
||||
int num = 0;
|
||||
List<string> list3 = new List<string>();
|
||||
while (j < list[i].Length)
|
||||
{
|
||||
string text;
|
||||
if (list[i][j] == '"')
|
||||
{
|
||||
j++;
|
||||
int num2 = j;
|
||||
for (; j < list[i].Length; j++)
|
||||
{
|
||||
if (list[i][j] == '"')
|
||||
{
|
||||
j++;
|
||||
if (j >= list[i].Length || list[i][j] != '"')
|
||||
{
|
||||
j--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
text = list[i].Substring(num2, j - num2);
|
||||
text = text.Replace("\"\"", "\"");
|
||||
}
|
||||
else
|
||||
{
|
||||
int num3 = j;
|
||||
for (; j < list[i].Length && list[i][j] != ','; j++)
|
||||
{
|
||||
}
|
||||
|
||||
text = list[i].Substring(num3, j - num3);
|
||||
}
|
||||
|
||||
if (num < list3.Count)
|
||||
{
|
||||
list3[num] = text;
|
||||
}
|
||||
else
|
||||
{
|
||||
list3.Add(text);
|
||||
}
|
||||
|
||||
num++;
|
||||
for (; j < list[i].Length && list[i][j] != ','; j++)
|
||||
{
|
||||
}
|
||||
|
||||
if (j < list[i].Length)
|
||||
{
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
while (list3.Count > num)
|
||||
{
|
||||
list3.RemoveAt(num);
|
||||
}
|
||||
|
||||
list2.Add(list3);
|
||||
}
|
||||
|
||||
return list2;
|
||||
}
|
||||
|
||||
public static DataTable CsvToDataTable(string filePath)
|
||||
{
|
||||
return OpenCSV(filePath);
|
||||
}
|
||||
|
||||
public static DataTable OpenCSV(string filePath)
|
||||
{
|
||||
DataTable dataTable = new DataTable();
|
||||
try
|
||||
{
|
||||
int num = 0;
|
||||
string pattern = "(?<=^|,)(\"(?:[^\"]|\"\")*\"|[^,]*)";
|
||||
List<string> list = new List<string>(File.ReadAllLines(filePath, Encoding.Default));
|
||||
int num2 = 0;
|
||||
int num3 = 0;
|
||||
for (int i = 0; i < list.Count; i++)
|
||||
{
|
||||
num3++;
|
||||
string input = list[i];
|
||||
if (num3 < num + 1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (num3 == num + 1)
|
||||
{
|
||||
foreach (Match item in Regex.Matches(input, pattern))
|
||||
{
|
||||
dataTable.Columns.Add(item.Value);
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
MatchCollection matchCollection = Regex.Matches(input, "(?<=^|,)(\"(?:[^\"]|\"\")*\"|[^,]*)");
|
||||
num2 = 0;
|
||||
DataRow dataRow = dataTable.NewRow();
|
||||
foreach (Match item2 in matchCollection)
|
||||
{
|
||||
string text = item2.Value;
|
||||
if (text.Length > 2 && text.Substring(0, 1) == "\"" && text.Substring(text.Length - 1, 1) == "\"")
|
||||
{
|
||||
text = text.Remove(0, 1);
|
||||
text = text.Remove(text.Length - 1, 1);
|
||||
}
|
||||
|
||||
dataRow[num2] = text.Replace("\"\"", "\"");
|
||||
num2++;
|
||||
}
|
||||
|
||||
dataTable.Rows.Add(dataRow);
|
||||
}
|
||||
|
||||
return dataTable;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
new PClass().WErrTxt("OpenCSV错误:" + ex.ToString());
|
||||
return dataTable;
|
||||
}
|
||||
}
|
||||
|
||||
public static Encoding GetType(string FILE_NAME)
|
||||
{
|
||||
FileStream fileStream = new FileStream(FILE_NAME, FileMode.Open, FileAccess.Read);
|
||||
Encoding type = GetType(fileStream);
|
||||
fileStream.Close();
|
||||
return type;
|
||||
}
|
||||
|
||||
public static Encoding GetType(FileStream fs)
|
||||
{
|
||||
_ = new byte[3] { 255, 254, 65 };
|
||||
_ = new byte[3] { 254, 255, 0 };
|
||||
_ = new byte[3] { 239, 187, 191 };
|
||||
Encoding result = Encoding.Default;
|
||||
BinaryReader binaryReader = new BinaryReader(fs, Encoding.Default);
|
||||
int.TryParse(fs.Length.ToString(), out var result2);
|
||||
byte[] array = binaryReader.ReadBytes(result2);
|
||||
if (IsUTF8Bytes(array) || (array[0] == 239 && array[1] == 187 && array[2] == 191))
|
||||
{
|
||||
result = Encoding.UTF8;
|
||||
}
|
||||
else if (array[0] == 254 && array[1] == byte.MaxValue && array[2] == 0)
|
||||
{
|
||||
result = Encoding.BigEndianUnicode;
|
||||
}
|
||||
else if (array[0] == byte.MaxValue && array[1] == 254 && array[2] == 65)
|
||||
{
|
||||
result = Encoding.Unicode;
|
||||
}
|
||||
|
||||
binaryReader.Close();
|
||||
return result;
|
||||
}
|
||||
|
||||
private static bool IsUTF8Bytes(byte[] data)
|
||||
{
|
||||
int num = 1;
|
||||
for (int i = 0; i < data.Length; i++)
|
||||
{
|
||||
byte b = data[i];
|
||||
if (num == 1)
|
||||
{
|
||||
if (b >= 128)
|
||||
{
|
||||
while (((b = (byte)(b << 1)) & 0x80u) != 0)
|
||||
{
|
||||
num++;
|
||||
}
|
||||
|
||||
if (num == 1 || num > 6)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((b & 0xC0) != 128)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
num--;
|
||||
}
|
||||
}
|
||||
|
||||
if (num > 1)
|
||||
{
|
||||
throw new Exception("非预期的byte格式");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
35
CowainHmi/Helper/DataGridViewStyle.cs
Normal file
35
CowainHmi/Helper/DataGridViewStyle.cs
Normal file
@@ -0,0 +1,35 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace CowainHmi
|
||||
{
|
||||
public class DataGridViewStyle
|
||||
{
|
||||
/// <summary>
|
||||
/// 给DataGridView添加行号
|
||||
/// </summary>
|
||||
/// <param name="dgv"></param>
|
||||
/// <param name="e"></param>
|
||||
public void DgvRowPostPaint(DataGridView dgv, DataGridViewRowPostPaintEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
//添加行号
|
||||
SolidBrush v_SolidBrush = new SolidBrush(dgv.RowHeadersDefaultCellStyle.ForeColor);
|
||||
int v_LineNo = 0;
|
||||
v_LineNo = e.RowIndex + 1;
|
||||
string v_Line = v_LineNo.ToString();
|
||||
e.Graphics.DrawString(v_Line, e.InheritedRowStyle.Font, v_SolidBrush, e.RowBounds.Location.X + 15, e.RowBounds.Location.Y + 5);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("添加行号时发生错误,错误信息:" + ex.Message, "操作失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
44
CowainHmi/Helper/StringHelper.cs
Normal file
44
CowainHmi/Helper/StringHelper.cs
Normal file
@@ -0,0 +1,44 @@
|
||||
using PCHMI;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using static System.Net.Mime.MediaTypeNames;
|
||||
|
||||
namespace CowainHmi
|
||||
{
|
||||
public class StringHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// 写西门子字符串
|
||||
/// </summary>
|
||||
public static void SendSiemensString(int pid, string address, byte maxLen, string val)
|
||||
{
|
||||
var addr = new VAR().GADDR(pid, address); //获取真实地址
|
||||
string text = addr.Substring(0, 1);
|
||||
int num8;
|
||||
if (addr.Substring(0, 2) == "DB")
|
||||
{
|
||||
string[] array2 = addr.Split(new char[] { '.' });
|
||||
text = array2[0] + ".";
|
||||
num8 = Convert.ToInt32(array2[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
num8 = Convert.ToInt32(addr.Substring(1, addr.Length - 1));
|
||||
}
|
||||
|
||||
ushort result = BitConverter.ToUInt16(new byte[]
|
||||
{
|
||||
(byte)new PClass().GetLength(val), //实际字符串长度
|
||||
maxLen //最大字符串长度
|
||||
}, 0);
|
||||
PCHMI.RT.SEND_UINT16(pid, addr, result); //把最大字符串长度,实际字符串长度发送给PLC
|
||||
DCON.Send_Control(pid, text + (num8 + 2).ToString(), "字符串写入", val);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user