背景资讯
我有fez panda II(在 netmf 4.1 上运行),其中读取了一大堆字节。然后将这些字节以文本格式保存到SD卡。
目前,我将文件保存为1, 2, 3...
但是,我需要将这些加上时间戳。
由于熊猫会定期断电,我无法使用机载时钟,也无法使用DateTime.Now
属性。
正在读取的字节还包含开始时间。
字符串的格式类似于:
c5@!c5dcSTART 11/01/2015 12:49:12
more data.... 124 xyz
more data...
some more data...
some even more numeric/text data...
more data which include the word "START"...
目标
有没有办法检索这个开始时间?它必须非常快,因为数据正在以某种速度读取,并且文件处理线程已经略有滞后。
日期也需要保存为文件名,因此正斜杠可能需要替换为"文件名安全"的替代品。
我的总体目标是在文件保存时为其加上时间戳。
我想在第一次出现START
之后我是否可以获得前12位数字应该能够从那里继续工作。
任何人都知道如何获得' 1'在“START'”之后?
尝试约会
我已尝试使用String.IndexOf,然后使用子字符串来包含'行',然后进行修剪,尽管这似乎极慢并且很可能导致丢失了数据。
我也尝试将整个消息拆分成一个char数组(然后通过查找单词" START"然后继续获取'数字'之后) ,但这似乎也是非常低效的
更新
我最近发现我不能使用正则表达式,因为这只适用于NetMF 4.2+,而Fez Panda则运行4.1。
答案 0 :(得分:2)
对第一个原始数据执行以下代码,应该产生所需的值
var splits = val.Split(new char[]{' ', '\t'}`)
string date = splits[1];
string time = splits[2];
答案 1 :(得分:1)
您可以使用正则表达式:
Regex r = new Regex("START\\s([\\d/]+)\\s+([\\d:])", RegexOptions.IgnoreCase);
Match m = r.Match(text);
if (m.Success)
{
string date = m.Groups[1].Value; // this is the date portion
string time = m.Groups[2].Value; // this is the time portion
}
您可以将模式更改为更严格:
(\\d\\d?/\\d\\d?/\\d\\d)\\s+(\\d\\d?:\\d\\d?:\\d\\d?)
答案 2 :(得分:0)
使用string.split(" text")然后获取数组的第二个元素(它是您要查找的字符串之后的部分并使用正则表达式 那样:
System.Text.RegularExpressions.Regex.IsMatch(s, sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase)
答案 3 :(得分:0)
我最终使用@ Tigran&{39}分裂的改编,看起来像:
var x = message.IndexOf("START")+5;
string time = message.Substring(x,35);
string [] test = time.Split(new char[]{'/',':'});
然后我可以通过
访问它test[0]+test[1]+test[2]+test[3]+test[4];
再一次,我承认这是远可能是解决此问题的最低效方式, 到目前为止 ,至少,似乎能够应付ok-ish。 (虽然我仍会接受Tigran的回答)。