Adf.Base.Messaging.CsvMessageHandler.BreakIntoRecords C# (CSharp) Method

BreakIntoRecords() private method

private BreakIntoRecords ( MessageDefinition definition, StreamReader reader ) : IEnumerable
definition Adf.Core.Messaging.MessageDefinition
reader System.IO.StreamReader
return IEnumerable
        private IEnumerable<Record> BreakIntoRecords(MessageDefinition definition, StreamReader reader)
        {
            var currentLine = 1;
            var currentRecord = string.Empty;

            try
            {
                var records = new List<Record>();
                var recordDefinition = definition.Records[0];
                var table = new TableDescriber(recordDefinition.Name, DataSources.NoSource);

                var line = reader.ReadLine();
                if (definition.HasHeader) line = reader.ReadLine();

                string seperator = recordDefinition.FieldSeparator.Length == 1
                                       ? string.Format(@"(?<=^(?:[^""]*""[^""]*"")*[^""]*){0}",
                                                       recordDefinition.FieldSeparator)
                                       : recordDefinition.FieldSeparator;
                Regex seperatorRegex = recordDefinition.FieldSeparator.Length == 1
                                           ? new Regex(seperator, RegexOptions.Compiled)
                                           : null;

                while (line != null)
                {
                    string[] fields = seperatorRegex != null ? seperatorRegex.Split(line) : line.Split(new[] { recordDefinition.FieldSeparator }, StringSplitOptions.None);

                    var state = new DictionaryState { IsNew = true };

                    if (!recordDefinition.Fields.Exists(f => f.Name.Equals("ID", StringComparison.OrdinalIgnoreCase)))
                    {
                        state[new ColumnDescriber("ID", table, isIdentity: true)] = Guid.NewGuid();
                    }
                    state[new ColumnDescriber("TimeStamp", table, isTimestamp: true)] = null;

                    foreach (var fieldDefinition in recordDefinition.Fields)
                    {
                        currentRecord = fieldDefinition.Name;
                        ReadRecordField(state, table, fieldDefinition, fields);
                    }

                    records.Add(recordDefinition.Create(state));

                    line = reader.ReadLine();
                    currentLine++;
                    currentRecord = string.Empty;
                }

                return records;
            }
            catch (FormatException exception)
            {
                throw new MessagingException(string.Format("Unknown message format. Line {1}, field {2}. {0}", exception.Message, currentLine, currentRecord), exception);
            }
        }