#c# #arrays #split
#c# #массивы #разделить
Вопрос:
Привет, извините, ребята, я довольно новичок в C # и программировании в целом.
У меня есть текстовый файл, который я читаю, который содержит 10 строк (все, кроме первой, из которых имеют отношение).
Я хочу разделить каждую строку (кроме первой, поскольку это всего одно слово) на запятые, затем извлечь 5-ю строку вдоль каждой строки, добавив ее к итогу.
В настоящее время все, что я смог сделать, это, по сути, разделить и добавить одно и то же значение к общему 10 раз, вместо того, чтобы добавлять 9 разных значений вместе или сталкиваться с «Системой.Исключение 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();
В нынешнем виде приведенный выше код приводит к «Системе.Исключение IndexOutOfRangeException» выделение «vehicleValue = bits [4];»
Каждая строка файла выглядит так, кроме первой.
Car,Ford,GT40,1964,250000,987,Red,A1,2,4,FALSE
Значение, которое я хочу извлечь из этой конкретной строки, будет «250000» — 5-е по счету. Я пытаюсь получить 5-й бит из каждой строки.
Комментарии:
1.
bits[4]
является ли пятый элемент в массиве, поскольку индексация начинается с нуля, чтобы получить четвертый элемент, который вы должны получитьbits[3]
2. Если первый нужно пропустить, вы, вероятно, захотите начать цикл с 1? В какой строке возникает ошибка, что означает, какое значение
i
и что такоеlines[i]
?
Ответ №1:
Ваша проблема в том, что вы пытаетесь проанализировать также первую строку (которая не содержит достаточного количества записей, поэтому вы получаете исключение). Вы можете пропустить первую строку, начав итерацию с индекса 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();
Комментарии:
1. Кстати, с помощью 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();
.
Ответ №2:
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();
Комментарии:
1. Он сказал, что действительно хочет 5-й элемент.
2. В вопросе была опечатка, исправлена. Извините!