2015-01-12 1 views
2

Справочная информациянайти индекс первого числа, которое появляется после определенного подстроки в C#

У меня есть fez panda II (который работает на netmf 4,1), в котором читает нагрузку байтов. Эти байты затем сохраняются на SD-карту в текстовом формате.

В настоящее время я сохранить файл как 1, 2, 3...

Однако, мне нужно это, чтобы быть датируемые вместо этого.

Поскольку Panda будет регулярно теряться, я не могу использовать встроенные часы и не могу использовать свойство DateTime.Now.

Прочитанные байты также содержат начальное время .

Формат строки выглядит аналогично:

[email protected]!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"... 

Цель

Есть ли способ получения этого времени начала? Это должно быть довольно быстро тоже, поскольку данные считываются с некоторой скоростью, а поток обработки файлов уже немного отстает.

Дата также должна быть сохранена как имя файла, поэтому, возможно, необходимо заменить косые черты альтернативными вариантами «имя файла».

Моя общая цель - установить временные отметки в файлах по мере их сохранения.

Я имею в виду, если я мог бы получить первые 12 цифр после первого появления START я должен быть в состоянии работать оттуда.

Кто-нибудь знает, как я мог получить индекс «1» после слова «СТАРТ»?


Попытки Дата

Я попытался с помощью String.indexOf, затем подстроку содержать «линию», а затем отделкой, хотя это кажется чрезвычайно медленно и будет больше чем вероятность потери данных.

Я также попытался расщепить все сообщение в массив символов (и пройти, чтобы найти слово «СТАРТ», а затем пройти, чтобы получить «цифры» после него), но это также кажется очень неэффективным


Обновления

Я совсем недавно узнал, что я не могу использовать регулярное выражение, как это было реализовано только для NetMF 4.2+, тогда как Fez Panda работает на 4.1.

+0

так что 'START' подстрока? И это произойдет и в остальной части данных? Есть ли что-нибудь еще более описательное? –

+0

Пуск появляется несколько раз, к сожалению. Я просто знаю, что цифры появляются после первого появления. – jbutler483

+0

@CoderDennis: используя такие методы, как IndexOf() .., разбивая его на массив символов и работая оттуда. Я просто не умею писать код «** эффективный **». – jbutler483

ответ

2

выполняющегося на первую строке данных следующего кода следует подготовить требуемый значения

var splits = val.Split(new char[]{' ', '\t'}`) 
string date = splits[1]; 
string time = splits[2]; 
+0

Это, наверное, подход, который мне придется принять (или что-то подобное) - но я чувствую небольшое нежелание продолжать это по какой-то причине. – jbutler483

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?) 
+0

к сожалению (будучи редживным девственником) Я только что узнал, что Panda II работает netMF 4.1 и поэтому не имеет регулярного выражения. Regex был впервые реализован для NetMF в 4.2 :( – jbutler483

0

использовать string.split ("text"), затем получить второй элемент ar лучи (это часть после строки, которую вы ищете, и использовать регулярное выражение так:

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

к сожалению (будучи regex virgin) Я только что узнал, что Panda II запускает netMF 4.1 и поэтому не имеет регулярного выражения. Regex был впервые реализован для NetMF в 4.2 :( – jbutler483

+0

Сделайте это плохой путь, используйте IndexOf для всех чисел 0- 9, а затем найдите наименьшее число, которое вы можете сделать, используя цикл for и массив. Отметьте как ответ, если вы рассматриваете вопрос для ответа –

0

Я закончил с использованием адаптации @ Тигран answer расщепления, и выглядел как:

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]; 

Once ае ain, я признаю, что это далеко, вероятно, самый неэффективный способ решения этого вопроса, пока, по крайней мере, он способен справиться с нормально-иш. (Хотя я все равно соглашусь на ответ Тиграна).

 Смежные вопросы

  • Нет связанных вопросов^_^