2016-09-29 12 views
-2

私は、トランザクションレコードの一覧を読み、しきい値を超えたアカウント番号を返すトランザクションアクティビティを監視する銀行アプリケーションコードを試しています指定された日付。私は分割するかどうかはわからない読んだときAccountNumberを\ tTransactionDate \ tTransactionAmountC# - 銀行業務アプリケーションのトランザクションアクティビティを監視する方法

:このため

は私が持っている中でトランザクションレコードは、例えばのために、\ tの に間隔をあけて維持のStreamWriterを使用してダミーテキストファイルを作成しました特定の日付の別個の口座番号を収集し、取引金額を計算して、その金額が閾値を超えるかどうかをさらに検証する。

これに関するお問い合わせは高く評価されます。 ありがとうございます。

+0

xmlのようなものではなく、タブ区切りのリストを使用している理由はありますか? –

+0

一般的には、タブ区切りのファイルをデシリアライズしてC#オブジェクトにすることが最善の方法です。少なくとも、それは私の最初の本能です。私は、あなたがしなければならないことを少しデモします。 –

答えて

1

読み取った文字列の分割を使用して、タブを配列に分割することができます。

String Instr = "AccountNumber\tTransactionDate\tTransactionAmount"; 
char delim = '\t'; 
string[] array = Instr.Split(delim); 
// array[0] = AccountNumber 
// array[1] = TransactionDate 
// array[2] = TransactionAmount 
0

スティーブが言ったことを基に、私は個人的にテキストをオブジェクトに逆直列化する傾向があります。

ここで、テキストの配列だけでなく、プロパティが正しいタイプのオブジェクトの配列を持つことができます。日付比較を行う方が簡単です...特定のアカウントが普通の古いオブジェクトに入っている場合は、すべての金額を加算します。少なくとも、それは私のためです。

私が下に持つものは、かなり悪い考えです。しかし、将来的にデータベースアクセス層のようなものに置き換えるために何かを突き詰めているだけであれば、これは短期間で機能する可能性があります。

編集:プレーンテキストファイルにデータを格納する場合は、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; } 
    } 
関連する問題