C# 查找c中某个子字符串后出现的第一个数字的索引#

C# 查找c中某个子字符串后出现的第一个数字的索引#,c#,string,datetime,.net-micro-framework,C#,String,Datetime,.net Micro Framework,背景信息 我有一个(运行在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...

背景信息

我有一个(运行在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
I后得到前12位数字,我应该可以从那里继续工作

有人知道我如何在“开始”之后得到“1”的索引吗


尝试约会

我尝试过使用String.IndexOf,然后是一个子字符串来包含“line”,然后是trim,尽管这看起来非常慢,很可能会导致数据丢失

我还尝试过将整个消息拆分成一个字符数组(然后查找单词“START”,然后查找后面的“number”),但这似乎效率很低


更新


我最近发现我不能使用正则表达式,因为它只在NetMF 4.2+上实现,而Fez Panda在4.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?)

在第一个原始数据上执行以下代码,应该会产生所需的值

 var splits = val.Split(new char[]{' ', '\t'}`)
 string date = splits[1];
 string time = splits[2];
使用string.split(“text”),然后获取数组的第二个元素(它是您要查找的字符串后面的部分,并使用regex) 就像这样:

System.Text.RegularExpressions.Regex.IsMatch(s, sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase)

我最终使用了@Tigran的分裂改编,看起来像:

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的答案).

子字符串
START
也是这样吗?它是否也会出现在其余的数据中?是否还有其他更具描述性的内容?START出现了多次,很遗憾。我只知道数字出现在第一次出现之后。@CoderDennis:使用IndexOf()之类的方法..,将其拆分为一个字符数组并从那里开始工作。我只是不擅长编写“高效”代码。如果第一个
START
出现在一个一致的位置,使用带有开始索引和长度的
Substring
将是最快的。@user1620220:它不会出现在一个固定的位置,我很抱歉,它应该始终是fi在这个日期和时间之前的第一个单词不幸的是(作为一个regex-virgin)我刚刚发现Panda II运行netMF 4.1,因此没有regex。regex是在4.2中首次为netMF实现的:(不幸的是(作为一个regex-virgin)我刚刚发现,熊猫II运行NETMF 4.1,因此没有ReGEX。ReGEX首先在NETMF中实现了4.2:(使它变成坏的方式,然后使用DigxOf for 0到9的所有数字,然后用循环和数组查找最小的数字。如果你考虑回答的问题,马克会回答。