스티브가 말한 것을 토대로 필자는 개인적으로 텍스트를 객체로 직렬화 해제하려는 경향이 있습니다. 아래에있는 것과 같은 작업을 수행합니다 ....
이제 텍스트 배열을 사용하는 대신 속성이 올바른 유형의 객체 배열을 가질 수 있습니다. 날짜 비교를하기가 더 쉽습니다 ... 일반 계정의 특정 계정에 대한 모든 금액을 합산합니다. 적어도 나를 위해 그것이있다.
부수적으로, 아래에있는 것은 꽤 나쁜 생각입니다. 그러나 미래에 데이터베이스 액세스 레이어와 같은 것으로 대체하기 위해 무언가를 뽑아 내고 있다면이 작업이 단기간에 가능합니다.
편집 : 일반 텍스트 파일에 데이터를 저장하려는 경우 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; }
}
C#에서 훨씬 쉽게 시간을 직렬화 할 수있는 xml과 같은 것보다는 탭으로 구분 된 목록을 사용하는 이유가 있습니까? –
일반적으로 가장 좋은 방법은 탭으로 구분 된 파일을 C# 개체로 deserialize하는 것입니다. 적어도 그것은 제 첫 번째 본능입니다. 나는 당신이해야 할 일에 대한 약간의 데모를 만들 것이다. –