Привет, извините, ребята, я новичок в C# и программировании в целом.
У меня есть текстовый файл, из которого я читаю, содержащий 10 строк (все, кроме первой, актуальны).
Я хочу разделить каждую строку (кроме первой, поскольку это всего одно слово) запятыми, а затем получить 5-ю строку вдоль каждой строки, добавив ее к общему количеству.
В настоящее время все, что я смог сделать, это по существу разделить и добавить одно и то же значение к общему количеству 10 раз вместо добавления 9 разных значений вместе или столкнуться с «System.IndexOutOfRangeException».
int totalValues = 0;
string[] larray = lines.ToArray(); //create array from list
string vehicleValue;
for (int i = 0; i < larray.Length; i++)
{
string[] bits = larray[i].Split(',');
vehicleValue = bits[4];
int vvint = int.Parse(vehicleValue);
totalValues = totalValues + vvint;
}
totalValue.Text = totalValues.ToString();
В нынешнем виде приведенный выше код приводит к «System.IndexOutOfRangeException», подсвечивающему «vehicleValue = bits [4];»
Каждая строка файла выглядит так, кроме первой.
Car,Ford,GT40,1964,250000,987,Red,A1,2,4,FALSE
Значение, которое я хочу из этой конкретной строки, будет «250000» — пятое по счету. Я пытаюсь получить 5-й из каждой строки.
Если первый нужно пропустить, вы, вероятно, захотите начать цикл с 1? В какой строке происходит ошибка, то есть каково значение i и что такое lines[i]?





bits[4] — пятый элемент в массиве, так как индексация начинается с нуля, чтобы получить четвертый элемент, необходимо получить bits[3]
int totalValues = 0;
string[] larray = lines.ToArray(); //create array from list
string vehicleValue;
for (int i = 0; i < larray.Length; i++)
{
string[] bits = larray[i].Split(',');
vehicleValue = bits[3];
int vvint = int.Parse(bits[3]);
totalValues = totalValues + vvint;
}
totalValue.Text = totalValues.ToString();
Он сказал, что действительно хочет 5-й предмет.
Была опечатка в вопросе, сейчас исправлено. Извиняюсь!
Ваша проблема в том, что вы пытаетесь проанализировать первую строку (которая не содержит достаточного количества записей, поэтому вы получаете исключение). Вы можете пропустить первую строку, начав итерацию с индекса 1:
int totalValues = 0;
string[] larray = lines.ToArray(); //create array from list
string vehicleValue;
for (int i = 1; i < larray.Length; i++)
{
string[] bits = larray[i].Split(',');
vehicleValue = bits[4];
int vvint = int.Parse(vehicleValue);
totalValues = totalValues + vvint;
}
totalValue.Text = totalValues.ToString();
Кстати, с Linq может быть написано var totalValues = lines.Skip(1).Sum(line => { var bits = line.Split(','); var vehicleValue = bits[4]; var vvint = int.Parse(vehicleValue); return vvint; }); totalValue.Text = totalValues.ToString();. В зависимости от предпочтений, его можно сжать еще больше, поэтому весь код будет выглядеть примерно так: totalValue.Text = lines.Skip(1).Sum(x => int.Parse(x.Split(',')[4])).ToString();.
bits[4]— пятый элемент в массиве, так как индексация начинается с нуля, чтобы получить четвертый элемент, необходимо получитьbits[3]