我正在制作软件以帮助跟踪志愿者的工作时间。现在我有一个文本文件(名字与志愿者一样),我每次有人登录或退出时都会记录日期和时间,如下所示:
Sign In - 04/04/16 23:51:55
Sign Out - 04/05/16 00:09:48
Sign In - 04/05/16 00:09:55
但我需要做的是提取日期和时间,以便我可以说这位志愿者在这一天工作了x个小时。这就是我的尝试:
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);
然后为下一个注销线做同样的事情,然后继续进行数学运算。我确信你已经在考虑这需要永远编码并限制我可以拥有多少条目。我需要一个更好的方法。我愿意尝试不同的文件类型,只要我能在软件外面读取文件就会出错。在某些时候,我将使用数据库,但截至目前,这是一个概念证明。在我能够证明这可以节省时间,金钱和一些人的头发后,我会。谢谢你的帮助。
答案 0 :(得分:0)
每一行都有登录和注销。将记录保存在csv文件中
04/04/16 23:51:55, 04/05/16 00:09:48
04/05/16 00:09:55
请注意,第二次登录尚未退出。
解析此文件
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]);
}
}