public LogRowElements ParseElements(string entry)
        {
            LogRowElements elements = new LogRowElements();

            Regex rgx   = new Regex(MatchPattern, RegexOptions.IgnoreCase);
            var   parts = rgx.Matches(entry);

            elements.PartsCount     = parts.Count;
            elements.IP             = parts[0].ToString();
            elements.Identity       = parts[1].ToString();
            elements.UserId         = parts[2].ToString();
            elements.Timestamp      = parts[3].ToString();
            elements.Offset         = parts[4].ToString();
            elements.RequestMessage = parts[5].ToString();
            elements.StatusCode     = parts[6].ToString();
            elements.Size           = parts[7].ToString();
            elements.Referer        = parts[8].ToString();
            elements.URL            = parts[9].ToString();
            elements.UserAgent      = parts[10].ToString();
            elements.Forwarded      = parts[11].ToString();

            if (parts.Count != 12)
            {
                elements.Error = true;
            }

            return(elements);
        }
        public override IEnumerable <IRow> Extract(IUnstructuredReader input, IUpdatableRow output)
        {
            string line;

            //Read the input line by line
            foreach (Stream current in input.Split(_row_delim))
            {
                using (StreamReader streamReader = new StreamReader(current, this._encoding))
                {
                    line = streamReader.ReadToEnd().Trim();

                    LogRowParser   splitter = new LogRowParser();
                    LogRowElements parts    = new LogRowElements();

                    parts = splitter.ParseElements(line);

                    output.Set <string>(0, parts.IP);
                    output.Set <string>(1, parts.Identity);
                    output.Set <string>(2, parts.UserId);
                    output.Set <string>(3, parts.Timestamp);
                    output.Set <string>(4, parts.Offset);
                    output.Set <string>(5, parts.RequestMessage);
                    output.Set <string>(6, parts.StatusCode);
                    output.Set <string>(7, parts.Size);
                    output.Set <string>(8, parts.Referer);
                    output.Set <string>(9, parts.URL);
                    output.Set <string>(10, parts.UserAgent);
                    output.Set <string>(11, parts.Forwarded);

                    yield return(output.AsReadOnly());
                }
            }
        }