Пример #1
0
 /**
  * Skip commented lines in the source file
  */
 public void BeforeRead(BeforeReadEventArgs e)
 {
     if (e.RecordLine.StartsWith("#"))
     {
         e.SkipThisRecord = true;
     }
 }
Пример #2
0
 public void BeforeRead(BeforeReadEventArgs e)
 {
     if (string.IsNullOrWhiteSpace(e.RecordLine))
     {
         e.SkipThisRecord = true;
     }
 }
        private void BeforeEvent(EngineBase sender, BeforeReadEventArgs <SampleType> e)
        {
            if (e.RecordLine.StartsWith(" ") || e.RecordLine.StartsWith("-"))
            {
                e.SkipThisRecord = true;
            }

            before++;
        }
Пример #4
0
        //-> {/Example.File}

        //-> {Example.File:EventHandler.cs}
        private void BeforeEvent(EngineBase engine, BeforeReadEventArgs <OrdersFixed> e)
        {
            if (e.RecordLine.StartsWith(" ") || e.RecordLine.StartsWith("-"))
            {
                e.SkipThisRecord = true;
            }

            //  Sometimes changing the record line can be useful, for example to correct for
            //  a bad data layout.  Here is an example of this, commented out for this example

            //if (e.RecordLine.StartsWith(" "))
            //   e.RecordLine = "Be careful!";
        }
Пример #5
0
        /// <summary>
        /// Provide a hook to preprocess a record
        /// </summary>
        /// <param name="e">Record details before read</param>
        /// <returns>True if record to be skipped</returns>
        protected bool OnBeforeReadRecord(BeforeReadEventArgs <T> e)
        {
            if (RecordInfo.NotifyRead)
            {
                ((INotifyRead)e.Record).BeforeRead(e);
            }

            if (BeforeReadRecord != null)
            {
                BeforeReadRecord(this, e);
            }

            return(e.SkipThisRecord);
        }
Пример #6
0
        private void BeforeReadRecord(EngineBase engine, BeforeReadEventArgs <T> e)
        {
            var line = e.RecordLine.Trim();

            if (!string.IsNullOrWhiteSpace(line) &&
                !HeaderRegex.IsMatch(line) &&
                !line.StartsWith(CsvParserConstants.CommentMarker))
            {
                return;
            }

            ++SkippedRecords;
            e.SkipThisRecord = true;
        }
Пример #7
0
        internal object ReadRecord(
            IRecordInfo recordInfo,
            int currentRecord,
            LineInfo line)
        {
            T record = (T)recordInfo.Operations.CreateRecordHandler();

            if (MustNotifyProgress) // Avoid object creation
            {
                OnProgress(new ProgressEventArgs(currentRecord, -1));
            }

            var skip = false;
            BeforeReadEventArgs <T> e = null;
            bool notifyRead           = MustNotifyReadForRecord(recordInfo);

            if (notifyRead)
            {
                e    = new BeforeReadEventArgs <T>(this, record, line.mLineStr, LineNumber);
                skip = OnBeforeReadRecord(e);
                if (e.RecordLineChanged)
                {
                    line.ReLoad(e.RecordLine);
                }
            }

            if (skip == false)
            {
                var values = new object[recordInfo.FieldCount];
                if (recordInfo.Operations.StringToRecord(record, line, values))
                {
                    if (notifyRead)
                    {
                        skip = OnAfterReadRecord(line.mLineStr, record, e.RecordLineChanged, LineNumber);
                    }

                    if (skip == false)
                    {
                        return(record);
                    }
                }
            }

            return(null);
        }
Пример #8
0
        private void OnBeforeReadRecord <TCrossSectionPoint>(EngineBase engine, BeforeReadEventArgs <TCrossSectionPoint> eventArgs)
            where TCrossSectionPoint : class, ICrossSectionPoint
        {
            var line = eventArgs.RecordLine;

            eventArgs.SkipThisRecord = true;

            if (string.IsNullOrWhiteSpace(line) || IsHeaderRecord(line))
            {
                return;
            }

            if (IsCrossSectionSurveyData(line))
            {
                ParseCrossSectionSurveyData(line);
                return;
            }

            if (IsCrossSectionPointData(line))
            {
                eventArgs.SkipThisRecord = false;
            }
        }
 protected void RaiseBeforeRead(BeforeReadEventArgs args)
 {
     BeforeReadEvent?.Invoke(this, args);
 }
Пример #10
0
 private void BeforeEvent2(EngineBase sender, BeforeReadEventArgs <SampleType> e)
 {
     e.SkipThisRecord = true;
     before++;
 }
Пример #11
0
 private static void BeforeEventChange(EngineBase engine, BeforeReadEventArgs <SampleType> e)
 {
     Assert.IsFalse(e.RecordLineChanged);
     e.RecordLine = "11121314901234";
     Assert.IsTrue(e.RecordLineChanged);
 }
Пример #12
0
 private static void Reader_BeforeReadEvent(EventLogReader sender, BeforeReadEventArgs args)
 {
     Console.SetCursorPosition(0, Console.CursorTop - 2);
     Console.WriteLine($"{DateTime.Now}: (+){_eventNumber}");
     Console.WriteLine($"{DateTime.Now}: {_lastPeriodEvent}");
 }
Пример #13
0
        /// <include file='MultiRecordEngine.docs.xml' path='doc/ReadStream/*'/>
        public MasterMultiDetails[] ReadStream(IRecordReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader", "The reader of the Stream can´t be null");
            }

            if (mRecordSelector == null)
            {
                throw new BadUsageException(
                          "The Recordselector can´t be null, please pass a not null Selector in the constructor.");
            }

            ResetFields();
            mHeaderText = String.Empty;
            mFooterText = String.Empty;

            var resArray = new List <MasterMultiDetails>();

            using (var freader = new ForwardReader(reader, mMultiRecordInfo[0].IgnoreLast))
            {
                freader.DiscardForward = true;

                mLineNumber = 1;

                var completeLine = freader.ReadNextLine();
                var currentLine  = completeLine;

                if (MustNotifyProgress) // Avoid object creation
                {
                    OnProgress(new ProgressEventArgs(0, -1));
                }

                int currentRecord = 0;

                if (mMultiRecordInfo[0].IgnoreFirst > 0)
                {
                    for (int i = 0; i < mMultiRecordInfo[0].IgnoreFirst && currentLine != null; i++)
                    {
                        mHeaderText += currentLine + StringHelper.NewLine;
                        currentLine  = freader.ReadNextLine();
                        mLineNumber++;
                    }
                }

                bool byPass = false;
                MasterMultiDetails record = null;
                var tmpDetails            = new ArrayList();
                var line = new LineInfo(currentLine)
                {
                    mReader = freader
                };

                while (currentLine != null)
                {
                    try
                    {
                        mTotalRecords++;
                        currentRecord++;

                        var  skip = false;
                        Type currType;
                        try
                        {
                            currType = mRecordSelector(this, currentLine);
                        }
                        catch (Exception ex)
                        {
                            throw new Exception("Selector failed to process correctly", ex);
                        }

                        if (currType != null)
                        {
                            var info = (RecordInfo)mRecordInfoHash[currType];
                            if (info == null)
                            {
                                throw new BadUsageException("A record is of type '" + currType.Name +
                                                            "' which this engine is not configured to handle. Try adding this type to the constructor.");
                            }
                            record = new MasterMultiDetails();

                            var lastMaster     = info.Operations.CreateRecordHandler();
                            var masterEndIndex = currentLine.Length;
                            foreach (var detailSelector in mDetailSelectorHash[currType])
                            {
                                var detailIndex = currentLine.IndexOf(detailSelector.Start);
                                if (detailIndex > 0 && detailIndex < masterEndIndex)
                                {
                                    masterEndIndex = detailIndex;
                                }
                            }
                            var lineMaster = currentLine.Substring(0, masterEndIndex);

                            line.ReLoad(lineMaster);

                            if (MustNotifyProgress) // Avoid object creation
                            {
                                OnProgress(new ProgressEventArgs(currentRecord, -1));
                            }

                            BeforeReadEventArgs <object> e = null;
                            if (MustNotifyRead) // Avoid object creation
                            {
                                e    = new BeforeReadEventArgs <object>(this, lastMaster, lineMaster, LineNumber);
                                skip = OnBeforeReadRecord(e);
                                if (e.RecordLineChanged)
                                {
                                    line.ReLoad(e.RecordLine);
                                }
                            }

                            if (skip == false)
                            {
                                var values = new object[info.FieldCount];
                                if (info.Operations.StringToRecord(lastMaster, line, values))
                                {
                                    if (MustNotifyRead) // Avoid object creation
                                    {
                                        skip = OnAfterReadRecord(lineMaster, lastMaster, e.RecordLineChanged, LineNumber);
                                    }

                                    if (skip == false)
                                    {
                                        record.Master = lastMaster;
                                    }
                                }
                                if (currentLine.Length > lineMaster.Length)
                                {
                                    var detailsLine = currentLine.Substring(masterEndIndex);
                                    foreach (var detailSelector in mDetailSelectorHash[currType])
                                    {
                                        var detailStartIndex = detailsLine.IndexOf(detailSelector.Start) + 1;
                                        if (detailStartIndex < 1)
                                        {
                                            continue;
                                        }
                                        var detailEndIndex = detailsLine.IndexOf(detailSelector.End, detailStartIndex);
                                        if (detailEndIndex < 0)
                                        {
                                            detailEndIndex = detailsLine.Length;
                                        }

                                        var lineDetails  = detailsLine.Substring(detailStartIndex, detailEndIndex - detailStartIndex);
                                        var detailInfo   = (RecordInfo)mRecordInfoHash[detailSelector.Detail];
                                        var valuesDetail = new object[detailInfo.FieldCount];
                                        tmpDetails.Clear();
                                        foreach (var lineDetail in lineDetails.Split(new [] { detailSelector.Separator }, StringSplitOptions.RemoveEmptyEntries))
                                        {
                                            try
                                            {
                                                line.ReLoad(lineDetail);
                                                var lastChild = detailInfo.Operations.StringToRecord(line, valuesDetail);
                                                if (lastChild != null)
                                                {
                                                    tmpDetails.Add(lastChild);
                                                }
                                            }
                                            catch (Exception ex)
                                            {
                                                switch (mErrorManager.ErrorMode)
                                                {
                                                case ErrorMode.ThrowException:
                                                    throw;

                                                case ErrorMode.IgnoreAndContinue:
                                                    break;

                                                case ErrorMode.SaveAndContinue:
                                                    var err = new ErrorInfo
                                                    {
                                                        mLineNumber    = mLineNumber,
                                                        mExceptionInfo = ex,
                                                        mRecordString  = completeLine
                                                    };
                                                    //							err.mColumnNumber = mColumnNum;

                                                    mErrorManager.AddError(err);
                                                    break;
                                                }
                                            }
                                        }
                                        record.Details.Add(detailSelector.Detail, tmpDetails.ToArray());
                                    }
                                }
                                if (skip == false)
                                {
                                    resArray.Add(record);
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        switch (mErrorManager.ErrorMode)
                        {
                        case ErrorMode.ThrowException:
                            byPass = true;
                            throw;

                        case ErrorMode.IgnoreAndContinue:
                            break;

                        case ErrorMode.SaveAndContinue:
                            var err = new ErrorInfo
                            {
                                mLineNumber    = freader.LineNumber,
                                mExceptionInfo = ex,
                                mRecordString  = completeLine
                            };

                            mErrorManager.AddError(err);
                            break;
                        }
                    }
                    finally
                    {
                        if (byPass == false)
                        {
                            currentLine  = freader.ReadNextLine();
                            completeLine = currentLine;
                            mLineNumber  = freader.LineNumber;
                        }
                    }
                }

                if (mMultiRecordInfo[0].IgnoreLast > 0)
                {
                    mFooterText = freader.RemainingText;
                }
            }
            return(resArray.ToArray());
        }
Пример #14
0
        private IList ReadStreamAsList(TextReader reader, int maxRecords, DataTable dt)
        {
            if (reader == null)
            {
                throw new ArgumentNullException(nameof(reader), "The reader of the Stream can´t be null");
            }

            HeaderText = string.Empty;
            FooterText = string.Empty;

            IList result;

            using (var recordReader = new TextReaderWrapper(reader))
            {
                ResetFields();


                if (_objectEngine)
                {
                    result = new ArrayList();
                }
                else
                {
                    result = new List <T>();
                }

                var currentRecord = 0;

                var streamInfo = new StreamInfoProvider(reader);
                using (var freader = new ForwardReader(recordReader, RecordInfo.IgnoreLast))
                {
                    freader.DiscardForward = true;

                    string currentLine, completeLine;

                    LineNumber = 1;

                    completeLine = freader.ReadNextLine();
                    currentLine  = completeLine;

                    if (MustNotifyProgress) // Avoid object creation
                    {
                        OnProgress(new ProgressEventArgs(0, -1, streamInfo.Position, streamInfo.TotalBytes));
                    }

                    if (RecordInfo.IgnoreFirst > 0)
                    {
                        for (var i = 0; i < RecordInfo.IgnoreFirst && currentLine != null; i++)
                        {
                            HeaderText += currentLine + Environment.NewLine;
                            currentLine = freader.ReadNextLine();
                            LineNumber++;
                        }
                    }

                    var byPass = false;

                    if (maxRecords < 0)
                    {
                        maxRecords = int.MaxValue;
                    }

                    var line = new LineInfo(currentLine)
                    {
                        mReader = freader
                    };

                    var values = new object[RecordInfo.FieldCount];

                    while (currentLine != null &&
                           currentRecord < maxRecords)
                    {
                        completeLine = currentLine;

                        try
                        {
                            TotalRecords++;
                            currentRecord++;

                            line.ReLoad(currentLine);

                            var skip = false;

                            var record = (T)RecordInfo.Operations.CreateRecordHandler();

                            if (MustNotifyProgress) // Avoid object creation
                            {
                                OnProgress(new ProgressEventArgs(currentRecord,
                                                                 -1,
                                                                 streamInfo.Position,
                                                                 streamInfo.TotalBytes));
                            }

                            Events.BeforeReadEventArgs <T> e = null;
                            if (MustNotifyRead)
                            {
                                e    = new BeforeReadEventArgs <T>(this, record, currentLine, LineNumber);
                                skip = OnBeforeReadRecord(e);
                                if (e.RecordLineChanged)
                                {
                                    line.ReLoad(e.RecordLine);
                                }
                            }


                            if (skip == false)
                            {
                                if (RecordInfo.Operations.StringToRecord(record, line, values))
                                {
                                    if (MustNotifyRead) // Avoid object creation
                                    {
                                        skip = OnAfterReadRecord(currentLine, record, e.RecordLineChanged, LineNumber);
                                    }

                                    if (skip == false)
                                    {
                                        if (dt == null)
                                        {
                                            result.Add(record);
                                        }
                                        else
                                        {
                                            dt.Rows.Add(RecordInfo.Operations.RecordToValues(record));
                                        }
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            switch (ErrorManager.ErrorMode)
                            {
                            case ErrorMode.ThrowException:
                                byPass = true;
                                throw;

                            case ErrorMode.IgnoreAndContinue:
                                break;

                            case ErrorMode.SaveAndContinue:
                                var err = new ErrorInfo
                                {
                                    LineNumber    = freader.LineNumber,
                                    ExceptionInfo = ex,
                                    Text          = completeLine
                                };

                                ErrorManager.AddError(err);
                                break;
                            }
                        }
                        finally
                        {
                            if (byPass == false)
                            {
                                currentLine = freader.ReadNextLine();
                                LineNumber++;
                            }
                        }
                    }

                    if (RecordInfo.IgnoreLast > 0)
                    {
                        FooterText = freader.RemainingText;
                    }
                }
            }
            return(result);
        }
Пример #15
0
 public void BeforeRead(BeforeReadEventArgs <SampleType> e)
 {
     BeforeReadNotif = true;
 }
Пример #16
0
 public void BeforeRead(BeforeReadEventArgs e)
 {
 }
Пример #17
0
 private static void Reader_BeforeReadEvent(TechJournalReader sender, BeforeReadEventArgs args)
 {
     Console.SetCursorPosition(0, Console.CursorTop - 2);
     Console.WriteLine($"{DateTime.Now}: [{_lastLogDirectory}] (+){_eventNumber}");
     Console.WriteLine($"{DateTime.Now}: [{_lastLogDirectory}] {_lastPeriodEvent}");
 }
Пример #18
0
 public void BeforeRead(BeforeReadEventArgs e)
 {
     e.SkipThisRecord = string.IsNullOrWhiteSpace(e.RecordLine) || e.RecordLine.Equals("\u001a");
 }
Пример #19
0
        /// <include file='MultiRecordEngine.docs.xml' path='doc/ReadStream/*'/>
        public object[] ReadStream(IRecordReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader", "The reader of the Stream can´t be null");
            }

            if (mRecordSelector == null)
            {
                throw new BadUsageException("The Recordselector can´t be null, please pass a not null Selector in the constructor.");
            }

            ResetFields();
            mHeaderText = String.Empty;
            mFooterText = String.Empty;

            var resArray = new ArrayList();

            using (var freader = new ForwardReader(reader, mMultiRecordInfo[0].IgnoreLast))
            {
                freader.DiscardForward = true;

                string currentLine, completeLine;

                mLineNumber = 1;

                completeLine = freader.ReadNextLine();
                currentLine  = completeLine;

#if !MINI
                if (MustNotifyProgress) // Avoid object creation
                {
                    OnProgress(new ProgressEventArgs(0, -1));
                }
#endif
                int currentRecord = 0;

                if (mMultiRecordInfo[0].IgnoreFirst > 0)
                {
                    for (int i = 0; i < mMultiRecordInfo[0].IgnoreFirst && currentLine != null; i++)
                    {
                        mHeaderText += currentLine + StringHelper.NewLine;
                        currentLine  = freader.ReadNextLine();
                        mLineNumber++;
                    }
                }


                bool byPass = false;

                var line = new LineInfo(currentLine)
                {
                    mReader = freader
                };

                while (currentLine != null)
                {
                    try
                    {
                        mTotalRecords++;
                        currentRecord++;

                        line.ReLoad(currentLine);

                        var  skip     = false;
                        Type currType = null;
                        try
                        {
                            currType = mRecordSelector(this, currentLine);
                        }
                        catch (Exception ex)
                        {
                            throw new Exception("Selector failed to process correctly", ex);
                        }

                        if (currType != null)
                        {
                            var info = (RecordInfo)mRecordInfoHash[currType];
                            if (info == null)
                            {
                                throw new BadUsageException("A record is of type '" + currType.Name +
                                                            "' which this engine is not configured to handle. Try adding this type to the constructor.");
                            }

                            var record = info.Operations.CreateRecordHandler();

#if !MINI
                            if (MustNotifyProgress) // Avoid object creation
                            {
                                OnProgress(new ProgressEventArgs(currentRecord, -1));
                            }

                            BeforeReadEventArgs <object> e = null;
                            if (MustNotifyRead) // Avoid object creation
                            {
                                e    = new BeforeReadEventArgs <object>(this, record, currentLine, LineNumber);
                                skip = OnBeforeReadRecord(e);
                                if (e.RecordLineChanged)
                                {
                                    line.ReLoad(e.RecordLine);
                                }
                            }
#endif

                            if (skip == false)
                            {
                                var values = new object[info.FieldCount];
                                if (info.Operations.StringToRecord(record, line, values))
                                {
#if !MINI
                                    if (MustNotifyRead) // Avoid object creation
                                    {
                                        skip = OnAfterReadRecord(currentLine, record, e.RecordLineChanged, LineNumber);
                                    }
#endif

                                    if (skip == false)
                                    {
                                        resArray.Add(record);
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        switch (mErrorManager.ErrorMode)
                        {
                        case ErrorMode.ThrowException:
                            byPass = true;
                            throw;

                        case ErrorMode.IgnoreAndContinue:
                            break;

                        case ErrorMode.SaveAndContinue:
                            var err = new ErrorInfo
                            {
                                mLineNumber    = freader.LineNumber,
                                mExceptionInfo = ex,
                                mRecordString  = completeLine
                            };
                            //							err.mColumnNumber = mColumnNum;

                            mErrorManager.AddError(err);
                            break;
                        }
                    }
                    finally
                    {
                        if (byPass == false)
                        {
                            currentLine  = freader.ReadNextLine();
                            completeLine = currentLine;
                            mLineNumber  = freader.LineNumber;
                        }
                    }
                }

                if (mMultiRecordInfo[0].IgnoreLast > 0)
                {
                    mFooterText = freader.RemainingText;
                }
            }
            return(resArray.ToArray());
        }
Пример #20
0
 public void BeforeRead(BeforeReadEventArgs e)
 {
     BeforeReadNotif = true;
 }
Пример #21
0
 public void BeforeRead(BeforeReadEventArgs <SampleType> e)
 {
 }
Пример #22
0
 public void BeforeRead(BeforeReadEventArgs e)
 {
     // throw new NotImplementedException();
 }