コード例 #1
0
ファイル: MappedReader.cs プロジェクト: palotasb/cornelius
        public static IEnumerable <T> Read <T>(string path, Map map, IInputDriver driver)
            where T : new()
        {
            var reader = driver.GetReader(path, null);
            List <Assignment> assignments = new List <Assignment>();

            FieldInfo[] fields = typeof(T).GetFields();

            foreach (FieldInfo field in fields)
            {
                MapAttribute attribute = (MapAttribute)field.GetCustomAttributes(typeof(MapAttribute), false).FirstOrDefault();
                if (attribute != null)
                {
                    Assignment assignment = null;
                    var        entries    = map.Columns.Where(e => e.Value == field.Name);
                    foreach (var entry in entries)
                    {
                        int index = reader.FirstRow.IndexOf(entry.Key);
                        if (index >= 0)
                        {
                            assignment = new Assignment(index, field);
                            break;
                        }
                    }

                    if (assignment == null && attribute.Required)
                    {
                        throw new Exception("A \"" + field.Name + "\" mező nem található a térképben vagy a fájlban.");
                    }
                    else if (assignment != null)
                    {
                        Translation translation = null;
                        if (map.Enums.ContainsKey(field.Name))
                        {
                            translation = map.Enums[field.Name];
                        }
                        assignment.Cast = Transform.ToType(field.FieldType, translation);
                        assignments.Add(assignment);
                    }
                }
            }

            foreach (var record in reader.Skip(1))
            {
                T obj = new T();
                foreach (var assignment in assignments)
                {
                    assignment.Field.SetValue(obj, assignment.Cast(record[assignment.Index]));
                }
                yield return(obj);
            }

            reader.Dispose();
        }
コード例 #2
0
ファイル: TableReader.cs プロジェクト: palotasb/cornelius
        public static IEnumerable <T> Read <T>(string path, IInputDriver driver)
            where T : new()
        {
            var table  = (TableAttribute)typeof(T).GetCustomAttributes(typeof(TableAttribute), false).First();
            var fields = typeof(T).GetFields().Where(field => field.GetCustomAttributes(typeof(ColumnAttribute), true).Length > 0).OrderBy(field => ((ColumnAttribute)field.GetCustomAttributes(typeof(ColumnAttribute), true).First()).Number).ToArray();
            var reader = driver.GetReader(path, table.Name);

            foreach (var row in reader.Skip(1))
            {
                T item = new T();
                for (int i = 0; i < fields.Length; ++i)
                {
                    fields[i].SetValue(item, Transform.ToType(fields[i].FieldType)(row[i]));
                }
                yield return(item);
            }

            reader.Dispose();
        }