2016-04-06 19 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 

をしかし、私は何をする必要がありますかこのボランティアはこの日に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); 

が続いて数学をやって上に移動し、その後、次のサインアウトラインのために同じことをやって:これは私がしようとしているものです。私はあなたがすでに考えていると確信しています。これは、これが永久にコード化され、私が持つことができるエントリーの数を制限します。私はより良い方法が必要です。私は何かが間違っているソフトウェアの外にファイルを読むことができる限り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は彼らが1人のユーザーに1つのファイルを持っていると言いました。そして、これを行うには、書き込む前にサインアウトを待つか、サインインを見つけて更新して、現在ファイルを作成しているプロセスを複雑にする必要があります。 – juharr

+0

私はcsvファイルが存在することさえ知りませんでした。私はそれがどれくらいのノブかを示していると思います。病院ではこれをどうやって行うかについてさらに研究をしています。ありがとうございました。 – demandzm

+0

csvは書式設定されたテキストファイルです。コンマを使用して列を区切ります。 –

関連する問題