Вы читаете первый столбец, но не остальные.Что я делаю, так это создаю словарь, используя первое число в качестве индекса и вставляя два других поля в System.ValueTuple
(для этого нужно включить пакет Nuget ValueTyple).
СначалаЯ настраиваю некоторые вещи:
const int column1Start = 0;
const int column1Length = 3;
const int column2Start = 8;
const int column2Length = 15;
const int column3Start = 24;
int indexMin = int.MaxValue; //calculated during the first
int indexMax = int.MinValue; //pass through the file
Затем я создаю свой словарь.Этот синтаксис (string, decimal)
описывает 2-кортеж, который содержит строку и десятичное число (вроде как упорядоченные пары, о которых вас учили в старшей школе).
Dictionary<int, (string, decimal)> data = new Dictionary<int, (string, decimal)>();
Затем я делаю проходстроки файла, считывание данных и вставка результатов в мой словарь (и вычисление максимальных и минимальных значений для этого первого столбца):
var lines = File.ReadAllLines(fileName);
foreach (var line in lines) {
//no error checking
var indexString = line.Substring(column1Start, column1Length);
var cartoon = line.Substring(column2Start, column2Length).TrimEnd();
var numberString = line.Substring(column3Start);
if (int.TryParse(indexString, out var index)) {
//I have to parse the first number - otherwise there's nothing to index on
if (!decimal.TryParse(numberString, out var number)){
number = 0.0M;
}
data.Add(index, (cartoon, number));
if (index < indexMin) {
indexMin = index;
}
if (index > indexMax) {
indexMax = index;
}
}
}
Наконец, со всеми моими данными в руках, я перебираюот минимального значения до максимального значения, извлекая два других столбца из моего словаря:
for (int i = indexMin; i <= indexMax; ++i) {
if (!data.TryGetValue(i, out var val)){
val = ("0", 0.0M);
}
Console.WriteLine($"{i,5} {val.Item1,-column2Length - 2} {val.Item2, 10:N}");
}
Мое форматирование не совсем такое, как у вас (я немного его очистил).Ты можешь делать, что хочешь.Мои результаты выглядят так:
300 Family Guy 1,123.00
301 Dexters Lab 456.00
302 Rugrats 1,789.52
303 0 0.00
304 Scooby-Doo 321.00
305 0 0.00
306 Recess 2,654.00
307 Popeye 1,987.02