Пример #1
0
 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];
 }
Пример #2
0
 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;
 }
Пример #3
0
        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);
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
        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());
        }