如何在c中从文件中提取时间戳和值

  • 本文关键字:提取 时间戳 文件 c
  • 更新时间 :
  • 英文 :


我需要解析一个文件并对其进行一些处理。该文件是一个文本文件,数据是一个可变长度的数据,格式为{"2014-02-13T06:20:00":"3.0","2014-02-13 T13:50:00":《7.0》}。因此,2014-02-13TO6:20:00是时间戳,3.0是值。现在我需要根据值对时间戳进行排序。谢谢

您的源数据看起来像json,看起来是一个日期-时间和十进制值的简单键对。

如果添加Newtonsoft。Json nuget包到您的项目中,您可以使用以下代码加载数据并同时对其进行排序

string json = File.ReadAllText("sample.json");
SortedList<DateTime, decimal> data =
JsonConvert.DeserializeObject<SortedList<DateTime, decimal>>(json);

我为您提供解决方案并逐步解释。我假设您的编程语言是C#,并且所有数据都不是以json格式存储的。

首先,我们需要通过regex从txt中搜索值。因此,我们需要准确的模式,给我们正确的价值观。在正则表达式中,有组,所以我们可以得到组中的值,我不写所有的Regex基础。请参阅Regex wiki

所以你可以检查一下:https://www.debuggex.com/r/t6EiH6oQ84dqkFfL对于这个正则表达式,组1是我们的日期时间,组7是任何匹配的值。

我们可以迭代所有的Regex Matches来转换我们的数据对象,然后我们可以使用LinQ幂来排序等。

这是给你的完整例子。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace test
{
class Program
{
public class MyData
{
public DateTime ObjDateTime { get; set; }
public float Value { get; set; }
}

static void Main(string[] args)
{
string pattern =
""(\d{4}-(0?[1-9]|1[0-2])-(0?[1-9]|[12][0-9]|3[01])T(00|0[0-9]|1[0-9]|2[0-3]):(0[0-9]|[0-5][0-9]):(0[0-9]|[0-5][0-9]))": "(\d\.\d)"";
string bulkData = "{"2014-02-13T06:20:00": "3.0", "2014-02-13T13:50:00": "7.0"}";
Regex rx = new Regex(pattern, RegexOptions.Compiled);
List<MyData> lst = new List<MyData>();
foreach (Match match in rx.Matches(bulkData))
{
lst.Add(
new MyData()
{
ObjDateTime = DateTime.Parse(match.Groups.Values.Single(x => x.Name == "1").Value),
Value = float.Parse(match.Groups.Values.Single(x => x.Name == "7").Value)
});
}
Console.WriteLine("Ordered by Value Asc");
// order by value
foreach (var myData in lst.OrderBy(x => x.Value))
{
Console.WriteLine("Data: {0}, Value: {1}", myData.ObjDateTime, myData.Value);
}
Console.WriteLine("Ordered by Value Desc");
// order by desc value
foreach (var myData in lst.OrderByDescending(x => x.Value))
{
Console.WriteLine("Data: {0}, Value: {1}", myData.ObjDateTime, myData.Value);
}
}
}
}

最新更新