private void ProcessWaferRecipe(string line, SIO2_Logs sqlModel) { char[] delimiters = new char[] { ' ', '\t' }; string[] splittedLine = line.Split(delimiters); sqlModel.HeaderWaferID = splittedLine[3]; sqlModel.Recipe = splittedLine[5]; }
public GenerateSqlModel(SIO2_Logs sqlModel, List <Channel> channels, List <string> headers, List <string> mUnits, List <HistoricalData> historicalData, List <SummaryData> summaryData) { this.sqlModel = sqlModel; this.channels = channels; this.headers = headers; this.mUnits = mUnits; this.historicalData = historicalData; this.summaryData = summaryData; }
private void ProcessEquipment(string line, SIO2_Logs sqlModel) { //sqlModel.Machine_ID = ""; sqlModel.PCName = "-"; char[] delimiters = new char[] { ' ', '#' }; string[] splittedLine = line.Split(delimiters); for (int i = 0; i < splittedLine.Length; i++) { if (splittedLine[i].ToLower().Contains(ParseRules.PC)) { sqlModel.PCName = splittedLine[i]; } } sqlModel.Machine_ID = GenerateSqlRules.GetMachineId(sqlModel.PCName); }
private void ProcessFileName(string line, SIO2_Logs sqlModel) { try { // Here goes the logic: // 1. We are looking for end of path (\ character) -> Filename is everything after that // 2. Split line by '.' separator and row is splitted in array // 3. Extract file type from position 0 - depending if file has std or process in filename (a bit more splitting) // 4. Write text from array into variables int indexOfPathEnd = line.LastIndexOf(ParseRules.L1_0PathEnd) + 1; string fileName = line.Substring(indexOfPathEnd, line.Length - indexOfPathEnd); string[] splitByDot = line.Split('.'); DateTime date = GenerateDateTimeHeader(splitByDot[3], splitByDot[4]); sqlModel.FileName = fileName; sqlModel.DateAndTime = date; sqlModel.Lotnumber = splitByDot[1]; sqlModel.ProcessID = ExtractText(splitByDot[2]); sqlModel.Slotnumber = ExtractNumbers(splitByDot[2]); if (line.ToLower().Contains("std")) { string[] splitProcessAndFileType = splitByDot[0].Split('\\'); string[] std_pm = splitProcessAndFileType[2].Split('_'); sqlModel.Filetpye = std_pm[0]; sqlModel.Processmodul = std_pm[1]; } else if (line.ToLower().Contains("process")) { string[] splitProcessAndFileType = splitByDot[0].Split('\\'); sqlModel.Filetpye = splitProcessAndFileType[1]; sqlModel.Processmodul = splitProcessAndFileType[2]; } else { throw new Exception("File structure not recognized:"); } } catch (Exception ex) { Logger.Log("ProcessFileName method", PathName, ex.Message); } }
public void ParseLinesToRawModel(string path) { // Useful for debugging rowNo = 0; // Reset for next file sqlModel = new SIO2_Logs(); channels = new List <Channel>(); headers = new List <string>(); mUnits = new List <string>(); historicalDataList = new List <HistoricalData>(); summaryData = new List <SummaryData>(); string line; // Once we find HistoricalData, bool isDataRow = false; bool isSummaryRow = false; // Variable used to read hist. data -> 0 = read headers, 1 = read units, 2 = data int n = 0; //File.SetAttributes(path, FileAttributes.ReadOnly); // using (Stream stream = new FileStream(path, FileMode.Open, FileAccess.Read)) // { using (StreamReader rdr = new StreamReader(path)) { while ((line = rdr.ReadLine()) != null) { rowNo++; if (line.Contains(ParseRules.HistoricalDataLogger)) { ProcessFileName(line, sqlModel); } else if (line.Contains(ParseRules.WaferId)) { ProcessWaferRecipe(line, sqlModel); } else if (line.ToLower().Contains(ParseRules.PC)) { ProcessEquipment(line, sqlModel); } else if (line.Contains(ParseRules.ChannelRow) && line.Contains(ParseRules.ChannelRow2)) { ProcessChannels(line, channels, path); } // 1. Once we run into historical data marker, switch isDataRow to true, and data parsing begins // 2. When we run into summary data marker, switch off data parsing, and start summary parsing else if (line.Contains(ParseRules.HistoricalDataStart)) { isDataRow = true; } else if (isDataRow && !line.Contains(ParseRules.Summary)) { if (n == 0) { // Read headers and force reader to go to next row ReadHeaders(line, ref n, headers); continue; } else if (n == 1) { // Not needed, just in case ReadMeasurementUnits(line, ref n, mUnits); continue; } else { ReadHistoricalData(line, historicalDataList, headers, path); } } else if (line.Contains(ParseRules.Summary)) { // This condition cancels historical data parsing and initiates summary parsing by forcing reader to go for next row isDataRow = false; isSummaryRow = true; continue; } else if (isSummaryRow) { ReadSummaryData(line, summaryData, path, ref isSummaryRow); } } } // } if (headers.Contains(ParseRules.CurrentStepNumber)) { // Prepare and insert data into sqlModel new GenerateSqlModel(sqlModel, channels, headers, mUnits, historicalDataList, summaryData).CalculateAverage(); r.ImportData.Add(sqlModel); } //ReverseToRawDataForDebugging(historicalDataList); //sbTmp.Insert(1, string.Join("\t", headers) + Environment.NewLine); //System.IO.File.WriteAllText(@"D:\proba.txt", sbTmp.ToString()); }