使用C#在文本文件中提取行的特定部分

时间:2016-04-06 03:00:25

标签: c# visual-studio-2015

我正在制作软件以帮助跟踪志愿者的工作时间。现在我有一个文本文件(名字与志愿者一样),我每次有人登录或退出时都会记录日期和时间,如下所示:

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

然后为下一个注销线做同样的事情,然后继续进行数学运算。我确信你已经在考虑这需要永远编码并限制我可以拥有多少条目。我需要一个更好的方法。我愿意尝试不同的文件类型,只要我能在软件外面读取文件就会出错。在某些时候,我将使用数据库,但截至目前,这是一个概念证明。在我能够证明这可以节省时间,金钱和一些人的头发后,我会。谢谢你的帮助。

1 个答案:

答案 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]);
    }
}