スティーブが言ったことを基に、私は個人的にテキストをオブジェクトに逆直列化する傾向があります。
ここで、テキストの配列だけでなく、プロパティが正しいタイプのオブジェクトの配列を持つことができます。日付比較を行う方が簡単です...特定のアカウントが普通の古いオブジェクトに入っている場合は、すべての金額を加算します。少なくとも、それは私のためです。
私が下に持つものは、かなり悪い考えです。しかし、将来的にデータベースアクセス層のようなものに置き換えるために何かを突き詰めているだけであれば、これは短期間で機能する可能性があります。
編集:プレーンテキストファイルにデータを格納する場合は、C#で処理できる形式で格納する方がはるかに良いでしょう。 JSONのようなものを使用し、Newtonsoft.Jsonを使用してシリアライズ/デシリアライズまたはXMLを行い、System.Xml.Serializationを使用してデータをシリアライズ/デシリアライズします。
class Program
{
static void Main(string[] args)
{
string srcfile = @"C:\Workspace\tmp\TestSTuff\bank\transactions.txt";
string transactionstr;
using (FileStream fs = new FileStream(srcfile, FileMode.Open, FileAccess.Read))
{
byte[] buffer = new byte[fs.Length];
int numtoread = (int)fs.Length;
int numread = 0;
while (numtoread > 0)
{
int n = fs.Read(buffer, numread, numtoread);
if (n == 0)
break;
numread += n;
numtoread -= n;
}
transactionstr = Encoding.Default.GetString(buffer);
}
char[] newline = { '\r','\n' };
char delim = ',';
string[] transactionstrs = transactionstr.Split(newline);
List<Transaction> transactions = new List<Transaction>();
foreach (var t in transactionstrs)
{
try
{
string[] fields = t.Split(delim);
DateTime.Parse(fields[1]);
transactions.Add(new Transaction
{
AccountNumber = int.Parse(fields[0]),
TransactionDate = DateTime.Parse(fields[1]),
TransactionAmount = double.Parse(fields[2])
});
}
catch
{
continue;
}
}
}
}
public class Transaction
{
public int AccountNumber { get; set; }
public DateTime TransactionDate { get; set; }
public double TransactionAmount { get; set; }
}
xmlのようなものではなく、タブ区切りのリストを使用している理由はありますか? –
一般的には、タブ区切りのファイルをデシリアライズしてC#オブジェクトにすることが最善の方法です。少なくとも、それは私の最初の本能です。私は、あなたがしなければならないことを少しデモします。 –