Есть ли способ разделить каждую строку в массиве и каждый раз извлекать 5-й бит, добавляя к итогу?

#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. В вопросе была опечатка, исправлена. Извините!