/// <summary> /// 读取命名的文件。第一行为头部描述,以下为以tab按键分割的文字,其中,头部含name的为名字,第一个含x的为x,依次为y,z。 /// </summary> /// <param name="path"></param> /// <returns></returns> public static List <NamedXyz> ReadNamedXyztxt(string path) { List <NamedXyz> listA = new List <NamedXyz>(); using (StreamReader reader = new StreamReader(new FileStream(path, FileMode.Open))) { int nameIndex = -1; int xIndex = -1; int yIndex = -1; int zIndex = -1; string line = reader.ReadLine(); //第一行为头部 string[] titles = StringUtil.SplitByBlank(line); int i = 0; foreach (var item in titles) { var title = item.ToLower(); if (title.Contains("name") && nameIndex == -1) { nameIndex = i; } else if (title.Contains("x") && xIndex == -1) { xIndex = i; } else if (title.Contains("y") && yIndex == -1) { yIndex = i; } else if (title.Contains("z") && zIndex == -1) { zIndex = i; } i++; } while ((line = reader.ReadLine()) != null) { if (String.IsNullOrWhiteSpace(line)) { continue; } string[] values = StringUtil.SplitByBlank(line); NamedXyz xyz = new NamedXyz() { Name = values[nameIndex], Value = new XYZ( double.Parse(values[xIndex]), double.Parse(values[yIndex]), double.Parse(values[zIndex])) }; listA.Add(xyz); } reader.Close(); } return(listA); }
/// <summary> /// 读取命名的文件。第一行为头部描述,以下为以tab按键分割的文字,其中,头部含name的为名字,第一个含x的为x,依次为y,z。 /// </summary> /// <param name="path"></param> /// <returns></returns> public static List <NamedXyz> ReadNamedXyz(string path) { List <NamedXyz> listA = new List <NamedXyz>(); using (StreamReader reader = new StreamReader(new FileStream(path, FileMode.Open))) { int nameIndex = -1; int xIndex = -1; int yIndex = -1; int zIndex = -1; string line = reader.ReadLine(); //第一行为头部 string[] titles = StringUtil.SplitByTab(line); int i = 0; foreach (var item in titles) { var title = item.ToLower(); if (title.Contains("name") && nameIndex == -1) { nameIndex = i; } else if (title.Contains("x") && xIndex == -1) { xIndex = i; } else if (title.Contains("y") && yIndex == -1) { yIndex = i; } else if (title.Contains("z") && zIndex == -1) { zIndex = i; } //逐历元比较,以历元为名称 else if (title.Contains("epoch") && nameIndex == -1) { nameIndex = i; } i++; } while ((line = reader.ReadLine()) != null) { if (String.IsNullOrWhiteSpace(line)) { continue; } string[] values = StringUtil.SplitByTab(line); NamedXyz xyz = Parse(values, nameIndex, xIndex, yIndex, zIndex); listA.Add(xyz); } return(listA); } }
/// <summary> /// 比较 /// </summary> /// <param name="site"></param> /// <returns></returns> public NamedXyz Compare(NamedXyz site) { NamedXyz namedXyz = new NamedXyz() { Name = site.Name, Value = this.Value - site.Value }; return(namedXyz); }
public static List <NamedXyz> CompareWithListB(List <NamedXyz> listA, List <NamedXyz> listB) { List <NamedXyz> list = new List <NamedXyz>(); foreach (var item in listA) { NamedXyz site = listB.Find(m => string.Equals(m.Name.Trim(), item.Name.Trim(), StringComparison.CurrentCultureIgnoreCase)); if (site != null) { list.Add((site)); } } return(list); }
/// <summary> /// 比较 /// </summary> /// <param name="listA"></param> /// <param name="listB"></param> /// <returns></returns> public static List <NamedXyz> Compare(List <NamedXyz> listA, List <NamedXyz> listB, bool enableCutNameLen = false, int NameLen = 4) { List <NamedXyz> list = new List <NamedXyz>(); foreach (var item in listA) { NamedXyz site = listB.Find(m => string.Equals( GetCuttedName(m.Name.Trim(), enableCutNameLen, NameLen) , GetCuttedName(item.Name.Trim(), enableCutNameLen, NameLen), StringComparison.CurrentCultureIgnoreCase)); if (site != null) { list.Add(item.Compare(site)); } } return(list); }
/// <summary> /// 解析 /// </summary> /// <param name="values"></param> /// <param name="nameIndex"></param> /// <param name="xIndex"></param> /// <param name="yIndex"></param> /// <param name="zIndex"></param> /// <returns></returns> public static NamedXyz Parse(string[] values, int nameIndex = 0, int xIndex = 1, int yIndex = 2, int zIndex = 3) { var z = 0.0; if (zIndex != -1) { z = double.Parse(values[zIndex]); } NamedXyz xyz = new NamedXyz() { Name = values[nameIndex], Value = new XYZ( double.Parse(values[xIndex]), double.Parse(values[yIndex]), z) }; return(xyz); }
/// <summary> /// 解析一行 /// </summary> /// <param name="line"></param> /// <param name="splitter"></param> /// <returns></returns> public static NamedXyz Parse(string line, char [] splitter = null) { if (splitter == null) { splitter = new char[] { ' ', ',', '\t' }; } var values = line.Split(splitter, StringSplitOptions.RemoveEmptyEntries); if (values.Length >= 4) { return(Parse(values)); } NamedXyz xyz = new NamedXyz() { Name = "", Value = new XYZ( double.Parse(values[0]), double.Parse(values[1]), double.Parse(values[2])) }; return(xyz); }