Это похоже на довольно стандартную компоновку типа CSV, которая достаточно проста для обработки. На самом деле вы можете сделать это с ADO.Net и провайдером Jet, но я думаю, что в долгосрочной перспективе, вероятно, будет проще обработать его самостоятельно.
Итак, во-первых, вы хотите обработать фактические текстовые данные. Я предполагаю, что разумно предположить, что каждая запись отделена каким-либо символом новой строки, поэтому вы можете использовать метод ReadLine, чтобы легко получить каждую запись:
StreamReader reader = new StreamReader("C:\Path\To\file.txt")
while(true)
{
var line = reader.ReadLine();
if(string.IsNullOrEmpty(line))
break;
// Process Line
}
А затем для обработки каждой строки вы можете разбить строку на запятую и сохранить значения в структуре данных. Поэтому, если вы используете структуру данных, подобную этой:
public class MyData
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Balance { get; set; }
public DateTime Date { get; set; }
}
И вы можете обработать данные строки следующим способом:
public MyData GetRecord(string line)
{
var fields = line.Split(',');
return new MyData()
{
Id = int.Parse(fields[0]),
Name = fields[1],
Balance = decimal.Parse(fields[2]),
Date = DateTime.Parse(fields[3])
};
}
Теперь это самый простой пример, и он не учитывает случаи, когда поля могут быть пустыми, и в этом случае вам нужно будет либо поддерживать NULL для этих полей (используя обнуляемые типы int ?, decimal? И DateTime? ) или определите какое-либо значение по умолчанию, которое будет присвоено этим значениям.
Так что, получив такую возможность, вы можете сохранить коллекцию объектов MyData в списке и легко выполнять вычисления на основе этого. Итак, учитывая ваш пример определения баланса на определенную дату, вы можете сделать что-то вроде:
var data = customerDataList.First(d => d.Name == customerNameImLookingFor
&& d.Date == dateImLookingFor);
Где customerDataList
- это коллекция MyData
объектов, считанных из файла, customerNameImLookingFor
- это переменная, содержащая имя клиента, а customerDateImLookingFor
- это переменная, содержащая дату.
В прошлом я использовал эту технику для обработки данных в текстовых файлах для файлов в диапазоне от пары записей до десятков тысяч записей, и он работает довольно хорошо.