diff --git a/mainProgram/Form1.cs b/mainProgram/Form1.cs index 1208868..25efff4 100644 --- a/mainProgram/Form1.cs +++ b/mainProgram/Form1.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using System.IO; namespace mainProgram { @@ -45,6 +46,55 @@ namespace mainProgram private void RadToolStripMenuItem_Click(object sender, EventArgs e) { + SpectralDataReaderWriter xx = new SpectralDataReaderWriter(@"D:\Desktop\0easySifProject\1raw\2021_12_16\beijing_17_57_44.csv"); + + + string name = xx.mDataTable.Rows[16][0].ToString(); + + int i = 0; + + + + + + + + + + + //mProjectManager. + + + + + //string[] sourceFilesPath = Directory.GetFileSystemEntries(sourceFolderName); + + //for (int i = 0; i < sourceFilesPath.Length; i++) + //{ + // string sourceFilePath = (sourceFilesPath[i]).Replace("\\", "/"); + // string[] forlders = sourceFilePath.Split('/'); + + // if (File.Exists(sourceFilePath)) + // { + // string dest = destFolderName; + // string sourceFileName = Path.GetFileName(sourceFilePath); + // File.Copy(sourceFilePath, Path.Combine(dest, sourceFileName), overwrite); + // } + // else if (Directory.Exists(sourceFilePath)) + // { + // string lastDirectory = forlders[forlders.Length - 1]; + // string dest = Path.Combine(destFolderName, lastDirectory).Replace("\\", "/"); + + // if (!Directory.Exists(dest)) + // { + // Directory.CreateDirectory(dest); + // } + // CopySubFun(sourceFilePath, dest, overwrite); + // } + //} + + + } } diff --git a/mainProgram/NewProjectWindow.cs b/mainProgram/NewProjectWindow.cs index 8b80937..a6e6f36 100644 --- a/mainProgram/NewProjectWindow.cs +++ b/mainProgram/NewProjectWindow.cs @@ -37,7 +37,6 @@ namespace mainProgram MessageBox.Show(this, "数据文件夹路径不能为空", "提示"); return; } - if (projectPath != null && projectPath.Length == 0) { MessageBox.Show(this, "工程路径不能为空", "提示"); @@ -45,30 +44,11 @@ namespace mainProgram } ProjectManager projectManager = new ProjectManager(projectPath); - - projectManager.CreateProjectStructure(); - projectManager.CopyFileToFile(dataPath);//复制原始数据文件到工程结构对应文件夹 - - - - - //ProjectManager xx = new ProjectManager(); - - ////xml文件存储路径 - //string myXMLFilePath = "D:\\csharp_vs2017\\easySif\\MyComputers.xml"; - ////生成xml文件 - //xx.GenerateXMLFile(myXMLFilePath); - ////遍历xml文件的信息 - //xx.GetXMLInformation(myXMLFilePath); - ////修改xml文件的信息 - //xx.ModifyXmlInformation(myXMLFilePath); - ////向xml文件添加节点信息 - //xx.AddXmlInformation(myXMLFilePath); - ////删除指定节点信息 - //xx.DeleteXmlInformation(myXMLFilePath); - + projectManager.CreateProject(dataPath); TransferEvent(projectManager);//触发事件 + + MessageBox.Show(this, "工程创建成功!", "提示"); Close();//创建工程完成后,关闭窗口 } diff --git a/mainProgram/OpenProjectWindow.cs b/mainProgram/OpenProjectWindow.cs index 8806c58..42d79dd 100644 --- a/mainProgram/OpenProjectWindow.cs +++ b/mainProgram/OpenProjectWindow.cs @@ -19,7 +19,19 @@ namespace mainProgram private void SelectProjectPathBtn_Click(object sender, EventArgs e) { + FolderBrowserDialog dialog = new FolderBrowserDialog(); + dialog.Description = "请选择工程文件夹"; + if (dialog.ShowDialog() == DialogResult.OK) + { + if (string.IsNullOrEmpty(dialog.SelectedPath)) + { + MessageBox.Show(this, "文件夹路径不能为空", "提示"); + return; + } + string savePath = dialog.SelectedPath; + ProjectPathTextBox.Text = savePath; + } } private void OpenProjectPathBtn_Click(object sender, EventArgs e) diff --git a/mainProgram/ProjectManager.cs b/mainProgram/ProjectManager.cs index c9e2b20..e9f1fa2 100644 --- a/mainProgram/ProjectManager.cs +++ b/mainProgram/ProjectManager.cs @@ -16,10 +16,11 @@ namespace mainProgram } private string mProjectPath; + private string mMetadataPath; private string mRawPath; private string mRadPath; private string mSifPath; - + public string ProjectPath { get @@ -32,12 +33,31 @@ namespace mainProgram } } - public void CreateProject() + public void CreateProject(string dataPath) { - //if (mProjectPath.Length==0) - //{ - // return; - //} + if (mProjectPath.Length == 0) + { + return; + } + + DelectDir(mProjectPath);//删除工程路径下的所有内容 + CreateProjectStructure(); + CopyFileToFile(dataPath);//复制原始数据文件到工程结构对应文件夹 + + ////创建工程元数据 + //string myXMLFilePath = mMetadataPath + "/metadata.xml"; + ////生成xml文件 + //GenerateXMLFile(myXMLFilePath); + ////遍历xml文件的信息 + //GetXMLInformation(myXMLFilePath); + ////修改xml文件的信息 + //ModifyXmlInformation(myXMLFilePath); + ////向xml文件添加节点信息 + //AddXmlInformation(myXMLFilePath); + ////删除指定节点信息 + //DeleteXmlInformation(myXMLFilePath); + + } public void OpenProject() @@ -254,19 +274,19 @@ namespace mainProgram for (int i = 0; i < sourceFilesPath.Length; i++) { - string sourceFilePath = (sourceFilesPath[i]).Replace("\\", "/"); - string[] forlders = sourceFilePath.Split('/'); + string sourceFilePath = sourceFilesPath[i]; + string[] forlders = sourceFilePath.Split('\\'); if (File.Exists(sourceFilePath))//是文件,直接拷贝 { string dest = destFolderName; - string sourceFileName = Path.GetFileName(sourceFilePath); + string sourceFileName = Path.GetFileName(sourceFilePath);//获取文件名 File.Copy(sourceFilePath, Path.Combine(dest, sourceFileName), overwrite); } else if (Directory.Exists(sourceFilePath))//是文件夹,拷贝文件夹;并递归 { string lastDirectory = forlders[forlders.Length - 1]; - string dest = Path.Combine(destFolderName, lastDirectory).Replace("\\", "/"); + string dest = Path.Combine(destFolderName, lastDirectory); if (!Directory.Exists(dest)) { @@ -279,7 +299,6 @@ namespace mainProgram private void DelectDir(string srcPath) { - DirectoryInfo dir = new DirectoryInfo(srcPath); FileSystemInfo[] fileinfo = dir.GetFileSystemInfos(); //返回目录中所有文件和子目录 foreach (FileSystemInfo i in fileinfo) @@ -302,9 +321,20 @@ namespace mainProgram public void CreateProjectStructure() { //创建工程文件夹结构 - mRawPath = mProjectPath + "/raw/"; - mRadPath = mProjectPath + "/rad/"; - mSifPath = mProjectPath + "/sif/"; + //mMetadataPath = mProjectPath + "\\.project\\"; + //mRawPath = mProjectPath + "\\1raw\\"; + //mRadPath = mProjectPath + "\\2rad\\"; + //mSifPath = mProjectPath + "\\3sif\\"; + + mMetadataPath = Path.Combine(mProjectPath, ".project"); + mRawPath = Path.Combine(mProjectPath, "1raw"); + mRadPath = Path.Combine(mProjectPath, "2rad"); + mSifPath = Path.Combine(mProjectPath, "3sif"); + + if (false == Directory.Exists(mMetadataPath)) + { + Directory.CreateDirectory(mMetadataPath); + } if (false == Directory.Exists(mRawPath)) { Directory.CreateDirectory(mRawPath); @@ -318,5 +348,37 @@ namespace mainProgram Directory.CreateDirectory(mSifPath); } } + + + + //处理工程中的数据 + public void Rad() + { + //string[] sourceFilesPath = Directory.GetFileSystemEntries(sourceFolderName); + + //for (int i = 0; i < sourceFilesPath.Length; i++) + //{ + // string sourceFilePath = sourceFilesPath[i]; + // string[] forlders = sourceFilePath.Split('\\'); + + // if (File.Exists(sourceFilePath))//是文件,直接拷贝 + // { + // string dest = destFolderName; + // string sourceFileName = Path.GetFileName(sourceFilePath);//获取文件名 + // File.Copy(sourceFilePath, Path.Combine(dest, sourceFileName), overwrite); + // } + // else if (Directory.Exists(sourceFilePath))//是文件夹,拷贝文件夹;并递归 + // { + // string lastDirectory = forlders[forlders.Length - 1]; + // string dest = Path.Combine(destFolderName, lastDirectory); + + // if (!Directory.Exists(dest)) + // { + // Directory.CreateDirectory(dest); + // } + // CopySubFun(sourceFilePath, dest, overwrite); + // } + //} + } } } diff --git a/mainProgram/SpectralProcessor.cs b/mainProgram/SpectralProcessor.cs index 490ef51..c546fd6 100644 --- a/mainProgram/SpectralProcessor.cs +++ b/mainProgram/SpectralProcessor.cs @@ -3,10 +3,311 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Data; +using System.IO; namespace mainProgram { class SpectralProcessor { + + + + + public void OpenNolinerData() + { + + } + + public void OpenCalData() + { + + } + + public void NonLinearCorrection(double[] coefficient, double[] rawData,int bandnumber) + { + for (int i = 0; i < bandnumber; i++) + { + rawData[i] = rawData[i] / (coefficient[0] + + coefficient[1] * rawData[i] + + coefficient[2] * Math.Pow(rawData[i], 2) + + coefficient[3] * Math.Pow(rawData[i], 3) + + coefficient[4] * Math.Pow(rawData[i], 4) + + coefficient[5] * Math.Pow(rawData[i], 5) + + coefficient[6] * Math.Pow(rawData[i], 6) + + coefficient[7] * Math.Pow(rawData[i], 7) + ); + } + } + + + public void RadCorrection(double[] calData, int i1,double[] rawData, int i2, int bandnumber) + { + for (int i = 0; i < bandnumber; i++) + { + rawData[i] = rawData[i] * calData[i] * (i1 * 1.0) / (i2 * 1.0); + } + + } + } + + public class SpectralDataReaderWriter + { + public SpectralDataReaderWriter(string csvPath) + { + mCsvPath = csvPath; + + OpenCSV(); + GetMetaData(); + } + private string mCsvPath; + + public DataTable mDataTable = null; + + private int mTotalSpectrometer; + private int mSpectralCount; + + + + + + public int findMaxColunmCount(string filePath) + { + Encoding encoding = GetType(filePath); //Encoding.ASCII;// + DataTable dt = new DataTable(); + FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read); + StreamReader sr = new StreamReader(fs, encoding); + + string strLine = ""; + string[] aryLine = null; + int maxColunmCount = 0; + int tmp; + + while ((strLine = sr.ReadLine()) != null) + { + aryLine = strLine.Split(','); + + tmp = aryLine.Length; + if (maxColunmCount < tmp) + { + maxColunmCount = tmp; + } + } + + sr.Close(); + fs.Close(); + + return maxColunmCount; + } + + //https://www.jb51.net/article/193012.htm + public void OpenCSV()//从csv读取数据返回table + { + mDataTable = new DataTable(); + int columnCount1 = findMaxColunmCount(mCsvPath); + + for (int i = 0; i < columnCount1; i++) + { + DataColumn dc1 = new DataColumn(); + mDataTable.Columns.Add(dc1); + } + + Encoding encoding = GetType(mCsvPath); //Encoding.ASCII;// + FileStream fs = new FileStream(mCsvPath, FileMode.Open, FileAccess.Read); + StreamReader sr = new StreamReader(fs, encoding); + + + //记录每次读取的一行记录 + string strLine = ""; + //记录每行记录中的各字段内容 + string[] aryLine = null; + + //逐行读取CSV中的数据 + while ((strLine = sr.ReadLine()) != null) + { + aryLine = strLine.Split(','); + DataRow dr = mDataTable.NewRow(); + for (int j = 0; j < aryLine.Length; j++) + { + dr[j] = aryLine[j]; + } + mDataTable.Rows.Add(dr); + + } + + sr.Close(); + fs.Close(); + } + + public void GetMetaData() + { + mTotalSpectrometer = int.Parse(mDataTable.Rows[1][1].ToString()); + + mSpectralCount = mDataTable.Rows.Count - 3 - mTotalSpectrometer * 2; + } + + public void SaveCSV(DataTable dt, string fullPath)//table数据写入csv + { + FileInfo fi = new FileInfo(fullPath); + if (!fi.Directory.Exists) + { + fi.Directory.Create(); + } + FileStream fs = new FileStream(fullPath, FileMode.Create, FileAccess.Write); + StreamWriter sw = new StreamWriter(fs, Encoding.UTF8); + string data = ""; + + for (int i = 0; i < dt.Columns.Count; i++)//写入列名 + { + data += dt.Columns[i].ColumnName.ToString(); + if (i < dt.Columns.Count - 1) + { + data += ","; + } + } + sw.WriteLine(data); + + for (int i = 0; i < dt.Rows.Count; i++) //写入各行数据 + { + data = ""; + for (int j = 0; j < dt.Columns.Count; j++) + { + string str = dt.Rows[i][j].ToString(); + str = str.Replace("\"", "\"\"");//替换英文冒号 英文冒号需要换成两个冒号 + if (str.Contains(',') || str.Contains('"') + || str.Contains('\r') || str.Contains('\n')) //含逗号 冒号 换行符的需要放到引号中 + { + str = string.Format("\"{0}\"", str); + } + + data += str; + if (j < dt.Columns.Count - 1) + { + data += ","; + } + } + sw.WriteLine(data); + } + sw.Close(); + fs.Close(); + } + + // 给定文件的路径,读取文件的二进制数据,判断文件的编码类型 + public Encoding GetType(string FILE_NAME) + { + FileStream fs = new FileStream(FILE_NAME, FileMode.Open, FileAccess.Read); + Encoding r = GetType(fs); + fs.Close(); + return r; + } + + // 通过给定的文件流,判断文件的编码类型 + public Encoding GetType(FileStream fs) + { + byte[] Unicode = new byte[] { 0xFF, 0xFE, 0x41 }; + byte[] UnicodeBIG = new byte[] { 0xFE, 0xFF, 0x00 }; + byte[] UTF8 = new byte[] { 0xEF, 0xBB, 0xBF }; //带BOM + Encoding reVal = Encoding.Default; + + BinaryReader r = new BinaryReader(fs, 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 = Encoding.UTF8; + } + else if (ss[0] == 0xFE && ss[1] == 0xFF && ss[2] == 0x00) + { + reVal = Encoding.BigEndianUnicode; + } + else if (ss[0] == 0xFF && ss[1] == 0xFE && ss[2] == 0x41) + { + reVal = Encoding.Unicode; + } + r.Close(); + return reVal; + } + + // 判断是否是不带 BOM 的 UTF8 格式 + private 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) + { + throw new Exception("非预期的byte格式"); + } + return true; + } + + public bool ChangeFileName(string OldPath, string NewPath) + { + bool re = false; + try + { + if (File.Exists(OldPath)) + { + File.Move(OldPath, NewPath); + re = true; + } + } + catch + { + re = false; + } + return re; + } + + public bool SaveCSV(string fullPath, string Data) + { + bool re = true; + try + { + FileStream FileStream = new FileStream(fullPath, FileMode.Append); + StreamWriter sw = new StreamWriter(FileStream, Encoding.UTF8); + sw.WriteLine(Data); + //清空缓冲区 + sw.Flush(); + //关闭流 + sw.Close(); + FileStream.Close(); + } + catch + { + re = false; + } + return re; + } + }; } diff --git a/mainProgram/bin/Debug/mainProgram.exe b/mainProgram/bin/Debug/mainProgram.exe index b55326e..d88d655 100644 Binary files a/mainProgram/bin/Debug/mainProgram.exe and b/mainProgram/bin/Debug/mainProgram.exe differ diff --git a/mainProgram/bin/Debug/mainProgram.pdb b/mainProgram/bin/Debug/mainProgram.pdb index b395281..00715b2 100644 Binary files a/mainProgram/bin/Debug/mainProgram.pdb and b/mainProgram/bin/Debug/mainProgram.pdb differ diff --git a/mainProgram/obj/Debug/mainProgram.csproj.GenerateResource.cache b/mainProgram/obj/Debug/mainProgram.csproj.GenerateResource.cache index 4f259af..1711aeb 100644 Binary files a/mainProgram/obj/Debug/mainProgram.csproj.GenerateResource.cache and b/mainProgram/obj/Debug/mainProgram.csproj.GenerateResource.cache differ diff --git a/mainProgram/obj/Debug/mainProgram.exe b/mainProgram/obj/Debug/mainProgram.exe index b55326e..d88d655 100644 Binary files a/mainProgram/obj/Debug/mainProgram.exe and b/mainProgram/obj/Debug/mainProgram.exe differ diff --git a/mainProgram/obj/Debug/mainProgram.pdb b/mainProgram/obj/Debug/mainProgram.pdb index b395281..00715b2 100644 Binary files a/mainProgram/obj/Debug/mainProgram.pdb and b/mainProgram/obj/Debug/mainProgram.pdb differ