예제 #1
0
        public static ExtractStatus Import <T, V>(this ISingleRecordMapper <T, V> recordMapper, IFileReader reader)
            where V : class, new()
        {
            ExtractStatus r;
            int           count = 0;

            do
            {
                try
                {
                    reader.Next();

                    recordMapper.Value = null;
                    r = recordMapper.Extract(reader);
                    if (r == ExtractStatus.Success)
                    {
                        ++count;
                        recordMapper.SetProperty();
                    }
                    else
                    {
                        if (r == ExtractStatus.ValueMismatched)
                        {
                            reader.Previous();
                            if (count >= recordMapper.MinOccurrence)
                            {
                                r = ExtractStatus.Success;
                            }
                            else
                            {
                                r         = ExtractStatus.Failed;
                                r.Message = String.Format(LessMessage, count, recordMapper.ToString(), recordMapper.MinOccurrence);
                            }
                        }
                        break;
                    }
                }
                catch (EndOfStreamException)
                {
                    if (count >= recordMapper.MinOccurrence)
                    {
                        r = ExtractStatus.EndOfFile;
                        break;
                    }
                    else
                    {
                        r         = ExtractStatus.Failed;
                        r.Message = String.Format(LessMessage, count, recordMapper.ToString(), recordMapper.MinOccurrence);
                    }
                }
                catch (Exception exc)
                {
                    throw new Exception(string.Format("Error at line {0} : {1}", reader.LineNo, exc.ToString()));
                }
            } while (recordMapper.MaxOccurrence == 0 || count < recordMapper.MaxOccurrence);

            return(r);
        }
예제 #2
0
        public static void Export <T, V>(this ISingleRecordMapper <T, V> recordMapper, IFileWriter writer)
            where V : class, new()
        {
            IEnumerable <V> vEnumerable = recordMapper.EnumerableOfV;

            if (null != vEnumerable)
            {
                foreach (V v in vEnumerable)
                {
                    recordMapper.Value = v;
                    recordMapper.Insert(writer);
                }
            }
            else
            {
                if (null == recordMapper.Value)
                {
                    recordMapper.Value = recordMapper.GetObject();
                }

                recordMapper.Insert(writer);
            }
        }