2016-09-29 1 views
-2

트랜잭션 기록 목록을 읽고 임계 금액을 초과 한 계정 번호를 반환하는 거래 활동을 모니터링하려는 은행 응용 프로그램 코드를 사용해 왔습니다 주어진 날짜. 내가 분할하는 방법을 잘 모르겠습니다 읽을 때 ACCOUNTNUMBER \ tTransactionDate \ tTransactionAmount은행 업무 응용 프로그램에 대한 거래 활동을 모니터하는 방법

이 들어

나는 내가 가지고있는 거래 기록이 예를 들어 \의 t 함께 간격을 유지하기 위해 관리하는 StreamWriter를를 사용하여 더미 텍스트 파일을 생성 주어진 날짜에 대해 별개의 계좌 번호를 수집하고 계좌 금액을 계산하여 계좌 금액이 계좌 금액을 초과하는지 더 확인하십시오.

이 문제에 대한 도움을 주시면 감사하겠습니다. 미리 감사드립니다.

+0

C#에서 훨씬 쉽게 시간을 직렬화 할 수있는 xml과 같은 것보다는 탭으로 구분 된 목록을 사용하는 이유가 있습니까? –

+0

일반적으로 가장 좋은 방법은 탭으로 구분 된 파일을 C# 개체로 deserialize하는 것입니다. 적어도 그것은 제 첫 번째 본능입니다. 나는 당신이해야 할 일에 대한 약간의 데모를 만들 것이다. –

답변

1

읽은 문자열에서 split을 사용하여 탭을 배열로 나눌 수 있습니다.

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을 사용하여 serialize/deserialize 또는 XML을 사용하고 System.Xml.Serialization을 사용하여 데이터를 serialize/deserialize합니다.

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; } 
    } 
관련 문제