/// <summary> /// 读取 /// </summary> /// <returns></returns> public override ObjectTableStorage Read() { using (StreamReader reader = new StreamReader(Stream, this.Encoding)) { //记录第一次出现的数据类型,后续依此转换 var name = Path.GetFileNameWithoutExtension(FilePath); ObjectTableStorage storage = new ObjectTableStorage(name); string [] titles = null; var line = ""; int index = -1; while ((line = reader.ReadLine()) != null) { if (String.IsNullOrWhiteSpace(line)) { continue; } index++; if (index == 0)//tittle { titles = line.Split(Spliters, StringSplitOptions); ColTypes.InitNames(titles); continue; } var vals = line.Split(Spliters, StringSplitOptions);//, StringSplitOptions.RemoveEmptyEntries); storage.NewRow(); int length = Math.Min(titles.Length, vals.Length); for (int i = 0; i < length; i++) { var title = titles[i].Trim(); var type = ColTypes[title]; var val = vals[i]; object newVal = null; if (!Appeared.Contains(i)) { type.ValueType = ValueTypeHelper.GetValueType(val); Appeared.Add(i); } if (type.ValueType == ValueType.Unknown) { type.ValueType = ValueTypeHelper.GetValueType(val); } newVal = type.GetValue(val); if (newVal != null)//更新类型 { // type.ValueType = ValueTypeHelper.GetValueType(currentVal); storage.AddItem(title, newVal); } } //storage.AddItem(titles, vals); storage.EndRow(); } return(storage); } }
/// <summary> /// 读取 /// </summary> /// <returns></returns> public override ObjectTableManager Read() { using (StreamReader reader = new StreamReader(Stream, this.Encoding)) { //记录第一次出现的数据类型,后续依此转换 var name = Path.GetFileNameWithoutExtension(FilePath); ObjectTableManager mgr = new ObjectTableManager() { Name = name }; string [] titles = null; var line = ""; int index = -1; bool isHeaderEnd = false; while ((line = reader.ReadLine()) != null) { if (String.IsNullOrWhiteSpace(line)) { continue; } index++; //处理头部 if (!isHeaderEnd) { string marker; if (IsHeaderLine(line, out marker)) { line = line.Replace(marker, ""); if (String.IsNullOrWhiteSpace(line)) { continue; } titles = line.Split(Spliters, StringSplitOptions.RemoveEmptyEntries); var colNameMgr = new NamedValueTypeManager( ); colNameMgr.InitNames(titles); var key = titles[0].Trim(); ColTypes[key] = colNameMgr; mgr.AddTable(key); continue; } else { isHeaderEnd = true; } } //处理内容 if (String.IsNullOrWhiteSpace(line)) { continue; } var strs = line.Split(Spliters, StringSplitOptions.None);//, StringSplitOptions.RemoveEmptyEntries); var keyName = strs[0].Trim(); var storage = mgr.Get(keyName); List <int> appeard = null; if (!Appeared.ContainsKey(keyName)) { Appeared[keyName] = new List <int>(); } appeard = Appeared[keyName]; var colTypes = ColTypes[keyName]; titles = colTypes.Titles; storage.NewRow(); int length = Math.Min(titles.Length, strs.Length); for (int i = 1; i < length; i++) { var title = titles[i].Trim(); var type = colTypes[title]; var val = strs[i]; object newVal = null; if (!appeard.Contains(i)) { type.ValueType = ValueTypeHelper.GetValueType(val, IsIntOrFloatFirst); appeard.Add(i); } newVal = type.GetValue(val); if (newVal != null) { storage.AddItem(title, newVal); } } //storage.AddItem(titles, vals); storage.EndRow(); } return(mgr); } }