2016-04-06 2 views
-2

Я делаю программное обеспечение, чтобы отслеживать часы работы для добровольцев. Сейчас у меня есть текстовый файл (с именем так же, как добровольца), что я каротажного о дате и времени каждый раз, когда кто-то подписывает в или, как это:Извлечение определенных частей строки в текстовый файл с использованием C#

Sign In - 04/04/16 23:51:55 
Sign Out - 04/05/16 00:09:48 
Sign In - 04/05/16 00:09:55 

Но что мне нужно сделать выдает дату и время, поэтому я могу сказать, что этот доброволец работал х количество часов в эту дату. Это то, что я пробовал:

string datetimeStringDay1In = System.IO.File.ReadLines(@"C:/users/public/Volunteers/" + Form1.selectedUser + ".txt").Skip(23).Take(1).First(); 
int startPosDay1In = datetimeStringDay1In.LastIndexOf("Sign In - ") + "Sign In - ".Length + 10; 
int lengthDay1In = datetimeStringDay1In.IndexOf("PM") - startPosDay1In; 
string SignInDay1 = datetimeStringDay1In.Substring(startPosDay1In, lengthDay1In); 

Затем сделать то же самое для следующего SignOut линии, а затем перейти к делать математику. Как я уверен, вы уже думаете, что это требует навсегда кода и ограничивает количество записей, которые у меня могут быть. Мне нужен лучший способ. Я готов попробовать типы файлов differnet, пока я могу читать файл за пределами программного обеспечения, если что-то пойдет не так. В какой-то момент я собираюсь использовать базу данных, но на данный момент это является доказательством концепции. После того, как я смогу доказать, что это экономит время, деньги и для некоторых людей волосы, я сделаю это. Спасибо вам за помощь.

+0

Какой вопрос? Я не могу понять. –

+0

всегда есть вывеска после входа? –

+0

Единственный раз, когда не будет выхода после входа в систему, является ли это лицо в настоящее время подписано. – demandzm

ответ

0

Каждая строка имеет как вход, так и вход. Сохранение записи в файле csv

04/04/16 23:51:55, 04/05/16 00:09:48 
04/05/16 00:09:55 

примечание 2-й вход еще не подписан.

Чтобы разобрать этот файл

var records = System.IO.File.ReadLines(@"C:/users/public/Volunteers/" + Form1.selectedUser + ".csv"); 

foreach(var line in records) { 
    var records = line.split(",") 
    DateTime Time_in = DateTime.Parse(records[0]); 
    if (records.length > 0) { 
     DateTime Time_out = DateTime.Parse(records[1]); 
    } 
} 
+0

OP сказал, что у них есть один файл для каждого пользователя. И это потребует от них либо дождаться выхода, прежде чем писать, либо найти знак в строке и обновить его, что усложнит процесс, который в настоящее время создает файл. – juharr

+0

Я даже не знал, что существуют файлы csv. Наверное, это показывает, сколько я нобо. Я делаю еще несколько исследований о том, как это сделать. Спасибо. – demandzm

+0

csv - форматированный текстовый файл. используйте запятую для разделения столбцов. –