예제 #1
0
        public CompilerContext(SourceUnit sourceUnit, CompilerOptions options, ErrorSink errorSink, ParserSink parserSink)
        {
            Contract.RequiresNotNull(sourceUnit, "sourceUnit");

            _sourceUnit = sourceUnit;
            _options    = options ?? sourceUnit.Engine.GetDefaultCompilerOptions();
            _errors     = errorSink ?? sourceUnit.Engine.GetCompilerErrorSink();
            _parserSink = parserSink ?? ParserSink.Null;
        }
예제 #2
0
        public Dictionary <int, List <DataPoint> > Parse(Stream stream, int projectId, string fileName, string trace)
        {
            var sink = new ParserSink();

            var responsible = (IParser)null;
            var candidates  = new List <IParser>
            {
                new ArbinParser(),
                new MaccorParser(),
                new MaccorV2Parser(),
                new MaccorCsvParser(),
                new NewareParser(),
                new NewareV2Parser(),
                new LandParser()
            };

            using (var reader = CreateReader(stream))
            {
                var sheetIndex = 0;

                do
                {
                    var sheetName = reader.Name;
                    if (responsible == null)
                    {
                        foreach (var p in candidates)
                        {
                            if (p.OnSheetStart(sheetIndex, sheetName))
                            {
                                Log.Info($"Parser for data file was found: {p.GetType().Name}");

                                responsible = p;
                                responsible.Connect(sink);
                                break;
                            }
                        }
                    }
                    else
                    {
                        responsible.OnSheetStart(sheetIndex, sheetName);
                    }

                    var rowIndex = 0;
                    while (reader.Read())
                    {
                        if (responsible == null)
                        {
                            foreach (var p in candidates)
                            {
                                if (p.OnDataRecord(rowIndex, reader))
                                {
                                    Log.Info($"CiExcelParser.Parse: Parser for data file was found: {p.GetType().Name}");

                                    responsible = p;
                                    responsible.Connect(sink);
                                    break;
                                }
                            }
                        }
                        else
                        {
                            responsible.OnDataRecord(rowIndex, reader);
                        }

                        rowIndex += 1;
                    }

                    if (responsible == null)
                    {
                        foreach (var p in candidates)
                        {
                            if (p.OnSheetEnd(sheetIndex, sheetName))
                            {
                                Log.Info($"CiExcelParser.Parse: Parser for data file was found: {p.GetType().Name}");

                                responsible = p;
                                responsible.Connect(sink);
                                break;
                            }
                        }
                    }
                    else
                    {
                        responsible.OnSheetEnd(sheetIndex, sheetName);
                    }

                    sheetIndex += 1;
                } while (reader.NextResult());

                responsible?.OnDocumentEnd();
            }

            if (responsible == null)
            {
                throw new FormatException($"CiExcelParser.Parse: Unknown file format File: {fileName}, projectId: {projectId}, trace: {trace}");
            }

            return(sink.ChannelDictionary);
        }