| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 | using System;using System.Globalization;using System.IO;namespace Ips.Library.Signals{    /// <summary>    /// 信号文件    /// </summary>    public class SignalFile    {        public const string SigTimeFolderFormat = "yyyyMMdd_HH";        public const string SigTimeFileFormat = "yyyyMMddHHmmss";        public const string SigFreqFormat = "#######0.000###";        public const string BandWidthFormat = "######0.###";        /// <summary>        /// 信号文件实体类        /// </summary>        public SignalFile()        {        }        /// <summary>        /// 采集文件http下载地址(HttpGet)        /// </summary>        public string DownloadUrl { get; set; }        /// <summary>        /// 信号时间        /// </summary>        public DateTime SigTime { get; set; }        /// <summary>        /// 信号频点        /// </summary>        public long SigFreq { get; set; }        /// <summary>        /// 信号带宽        /// </summary>        public int BandWidth { get; set; }        /// <summary>        /// 采样率        /// </summary>        public int Fs { get; set; }        /// <summary>        /// 接收站编码        /// </summary>        public string SiteCode { get; set; }        /// <summary>        /// 采集卡编码        /// </summary>        public string AdcCode { get; set; }        /// <summary>        /// 采集通道编号        /// </summary>        public int ChNum { get; set; }        /// <summary>        /// 卫星编号        /// </summary>        public string SatNum { get; set; }        /// <summary>        /// 目录名称        /// </summary>        public string DirectoryName => SigTime.ToString(SigTimeFolderFormat);        /// <summary>        /// 文件名称        /// </summary>        public string FileName => GetFileName(SigTime, SigFreq, BandWidth, Fs, SiteCode, AdcCode, ChNum, SatNum);        /// <summary>        /// 获取文件全路径        /// </summary>        public string GetLocalFullName(string dataRoot)        {            string fullName = Path.Combine(dataRoot, DirectoryName, FileName);            return fullName;        }        /// <summary>        /// 将文件名转换为信号文件对象        /// </summary>        /// <param name="input"></param>        /// <returns></returns>        public static SignalFile Parse(string input)        {            if (string.IsNullOrWhiteSpace(input)) return null;            input = Path.GetFileNameWithoutExtension(input);            var items = input.Split('_');            var result = new SignalFile();            DateTime sigTime;            if (DateTime.TryParseExact(items[0], SigTimeFileFormat, CultureInfo.CurrentUICulture, DateTimeStyles.None, out sigTime))            {                result.SigTime = sigTime;            }            foreach (var item in items)            {                var key = item[0];                var val = item.Substring(1);                switch (key)                {                    case 'F':                        result.SigFreq = double.TryParse(val, out double sigFreq) ? (long)Math.Round(sigFreq * 1e6, 0) : 0L;                        break;                    case 'W':                        result.BandWidth = double.TryParse(val, out double bandWidth) ? (int)Math.Round(bandWidth * 1e3) : 0;                        break;                    case 'C':                        result.Fs = int.TryParse(val, out int fs) ? fs : 0;                        break;                    case 'R':                        result.SiteCode = val;                        break;                    case 'K':                        result.AdcCode = val;                        break;                    case 'T':                        result.ChNum = int.TryParse(val, out int chNum) ? chNum : 0;                        break;                    case 'S':                        result.SatNum = val;                        break;                }            }            return result;        }        /// <summary>        /// 获取文件名称        /// </summary>        /// <param name="sigTime">信号时间</param>        /// <param name="sigFreq">信号频点</param>        /// <param name="bandWidth">信号带宽</param>        /// <param name="fs">采样率</param>        /// <param name="satNum">卫星编号</param>        /// <param name="siteCode">站点编码</param>        /// <param name="adcCode">采集卡编码</param>        /// <param name="chNum">通道号</param>        /// <param name="nullText">值为空时的替换符</param>        /// <returns></returns>        public static string GetFileName(DateTime? sigTime, long? sigFreq, int? bandWidth, int? fs, string siteCode, string adcCode, int? chNum, string satNum, string nullText = "")        {            string sigTimeText = sigTime.HasValue ? sigTime.Value.ToString(SigTimeFileFormat) : nullText;            string sigFreqText = sigFreq.HasValue && sigFreq > 0 ? "_F" + Math.Round(sigFreq.Value * 1e-6, 6).ToString(SigFreqFormat) : nullText;            string bandWidthText = bandWidth.HasValue && bandWidth > 0 ? "_W" + Math.Round(bandWidth.Value * 1e-3, 3).ToString(BandWidthFormat) : nullText;            string fsText = fs.HasValue && fs > 0 ? "_C" + fs.Value.ToString() : nullText;            string siteCodeText = !string.IsNullOrWhiteSpace(siteCode) ? "_R" + siteCode.Trim() : nullText;            string adcCodeText = !string.IsNullOrWhiteSpace(adcCode) ? "_K" + adcCode.Trim() : nullText;            string chNumText = chNum.HasValue && chNum > 0 ? $"_T{chNum}" : nullText;            string satNumText = !string.IsNullOrWhiteSpace(satNum) ? "_S" + satNum.Trim() : nullText;            return string.Concat(sigTimeText, sigFreqText, bandWidthText, fsText, siteCodeText, adcCodeText, chNumText, satNumText, ".dat");        }        /// <summary>        /// 创建信号文件基础信息        /// </summary>        /// <param name="sigTime">信号时间</param>        /// <param name="sigFreq">信号频点</param>        /// <param name="bandWidth">信号带宽</param>        /// <param name="fs">采样率(个)</param>        /// <param name="satNum">卫星编号</param>        /// <param name="siteCode">站点编码</param>        /// <param name="adcCode">采集卡编码</param>        /// <param name="chNum">通道号</param>        /// <returns></returns>        public static SignalFile Create(DateTime sigTime, long sigFreq, int bandWidth, int fs, string siteCode, string adcCode, int chNum, string satNum)        {            var result = new SignalFile()            {                SigTime = sigTime,                SigFreq = sigFreq,                BandWidth = bandWidth,                Fs = fs,                SiteCode = siteCode,                AdcCode = adcCode,                ChNum = chNum,                SatNum = satNum            };            return result;        }    }}
 |