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

Привет, извините, ребята, я новичок в 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-й из каждой строки.

bits[4] — пятый элемент в массиве, так как индексация начинается с нуля, чтобы получить четвертый элемент, необходимо получить bits[3]
Ashkan Mobayen Khiabani 20.04.2019 19:43

Если первый нужно пропустить, вы, вероятно, захотите начать цикл с 1? В какой строке происходит ошибка, то есть каково значение i и что такое lines[i]?

Sami Kuhmonen 20.04.2019 19:46
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
48
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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(); 

Он сказал, что действительно хочет 5-й предмет.

pikausp 20.04.2019 19:52

Была опечатка в вопросе, сейчас исправлено. Извиняюсь!

Josh Curtis 20.04.2019 20:16
Ответ принят как подходящий

Ваша проблема в том, что вы пытаетесь проанализировать первую строку (которая не содержит достаточного количества записей, поэтому вы получаете исключение). Вы можете пропустить первую строку, начав итерацию с индекса 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();.

Jeppe Stig Nielsen 21.04.2019 00:25

Другие вопросы по теме