12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- 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<char> 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<char> chars = new Span<char>(line);
- return Parse(chars, satid);
- }
- public static EphResult Parse(string line, int satid = 0)
- {
- Span<char> chars = new Span<char>(line.ToCharArray());
- return Parse(chars, satid);
- }
- public static IEnumerable<EphResult> ParseFile(string filename, int satid = 0)
- {
- using (var reader = new StreamReader(filename))
- {
- Span<char> 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<char> line = stackalloc char[colCount];
- readLen = reader.ReadBlock(line);
- if (readLen != colCount) continue;
- yield return Parse(line, satid);
- }
- }
- yield break;
- }
- }
- }
|