using System; using System.Collections.Generic; using System.IO; using System.Text; using Ips.Eph; using Ips.Library.Entity; namespace Ips.Eph.ResolveUtil { public static class HpeResolveUtil { const int MinColCount = 92; public static EphResult Parse(Span line, int satid = 0) { int i = 0; var year = int.Parse(line.Slice(i, 5)); i += 5; var month = int.Parse(line.Slice(i, 4)); i += 4; var day = int.Parse(line.Slice(i, 4)); i += 4; var hour = int.Parse(line.Slice(i, 4)); i += 4; var minute = int.Parse(line.Slice(i, 4)); i += 4; var second = float.Parse(line.Slice(i, 10)); i += 10; var x = double.Parse(line.Slice(i, 20)); i += 20; var y = double.Parse(line.Slice(i, 20)); i += 20; var z = double.Parse(line.Slice(i, 20)); i += 20; var vx = double.Parse(line.Slice(i, 20)); i += 20; var vy = double.Parse(line.Slice(i, 20)); i += 20; var vz = double.Parse(line.Slice(i, 20)); var time = new DateTime(year, month, day, hour, minute, (int)second, DateTimeKind.Local).AddHours(8); var result = new EphResult(satid, time.ToLocalTime(), x, y, z, vx, vy, vz); return result; } public static EphResult Parse(char[] line, int satid = 0) { Span chars = new Span(line); return Parse(chars, satid); } public static EphResult Parse(string line, int satid = 0) { Span chars = new Span(line.ToCharArray()); return Parse(chars, satid); } public static IEnumerable ParseFile(string filename, int satid = 0) { using (var reader = new StreamReader(filename)) { Span startLine = stackalloc char[300]; reader.ReadBlock(startLine); var colCount = startLine.IndexOf('\n') + 1; if (colCount < MinColCount) yield break; reader.BaseStream.Seek(0, SeekOrigin.Begin); reader.DiscardBufferedData(); var readLen = 0; while (!reader.EndOfStream) { Span line = stackalloc char[colCount]; readLen = reader.ReadBlock(line); if (readLen != colCount) continue; yield return Parse(line, satid); } } yield break; } } }