Извлечение определенного столбца из файла csv

Когда я запускаю этот код, он принимает 11 элементов в первой итерации. Во второй итерации он сокращается до 6 элементов, а в последней принимает 1 элемент, а затем показывает «исключение массива вне диапазона».

Что я делаю не так?

foreach (string line in File.ReadLines(Path))
{  
    string [] column = line.Split(',');
    if (id == column[4])
    {
        return false;
    }
    Array.Clear(column, 0, column.Length);
}

person Ali Elegant    schedule 04.12.2013    source источник
comment
Как выглядит ваш ввод? Что такое id? Предполагая, что id - это какая-то строка, IIRC, вы не можете сравнивать id и column[4] в С#, для этого есть функция (может быть, compare(id, column[4])?)   -  person KevinDTimm    schedule 05.12.2013
comment
Вы имеете в виду CSV? Если нет, то что такое КСФ?   -  person Yuck    schedule 05.12.2013
comment
Вы проверили, есть ли в вашем CSV-файле 11 столбцов во всех строках?   -  person Suresh    schedule 05.12.2013
comment
Во-первых, что не так с тем, что вы описали? Исключение кажется очевидным, но не очевидно, что что-то не так с шаблоном 11-6-1.   -  person Austin Salonen    schedule 05.12.2013
comment
я всегда должен брать 11, я не знаю, почему массив уменьшается до 6, а затем до 1 ???   -  person Ali Elegant    schedule 05.12.2013
comment
в чем идея вызова Array.Clear? столбец назначается снова на каждой итерации foreach.   -  person Mauricio Gracia Gutierrez    schedule 05.12.2013
comment
я только что попытался очистить массив, но он дает ту же ошибку без Array.clear   -  person Ali Elegant    schedule 05.12.2013
comment
каково значение идентификатора? Что делает этот метод? Вы просто пытаетесь получить 4-е значение из 11 значений, которые он считывает? Какова цель возврата false? Я могу помочь, но я действительно не знаю, чего вы пытаетесь достичь здесь.   -  person Josh    schedule 05.12.2013
comment
я должен сопоставить id, который является значением int, с четвертым столбцом в CSV-файле myu, и я думаю, что @sthotakura прав... его ответ: Вы проверяли, есть ли в вашем CSV-файле 11 столбцов во всех строках?   -  person Ali Elegant    schedule 05.12.2013


Ответы (2)


Вы пытались убедиться, что в проверяемой строке достаточно столбцов?

Под 4-м столбцом вы подразумеваете столбец с индексом 4? или вы имеете в виду 4-й столбец, который находится в индексе 3?

private bool SomeMethod(String path, String id)
{
    string [] column ;

    foreach (string line in File.ReadLines(Path))
    {  
        column = line.Split(',');

        //check that there are at least 5 columns before comparing it with ID
        if ((column.Length >= 5) && (id == column[4]))
        {
            return false;
        }
    }
}
person Mauricio Gracia Gutierrez    schedule 04.12.2013
comment
индекс четвертый, а столбец пятый - person Ali Elegant; 05.12.2013

Если вы говорите, что строка имеет только 1 элемент на 3-й итерации, тогда вы делаете столбец = line.Split(','), столбец будет иметь 1 элемент. поэтому в этот момент столбец [4] находится «вне диапазона», поскольку в массиве строк есть только один элемент.

Что именно вы пытаетесь с этим сделать, чтобы мы могли дать вам ответ лучше, чем просто исключение.

edit: Таким образом, по вашему комментарию все, что вам нужно сделать, это посмотреть, соответствует ли 5-й столбец тому, что находится в id, и вернуть false, если да?

foreach (string line in File.ReadLines(Path))
{  
    string [] column = line.Split(',');
    if (column.Count() >= 5 && column.id == column[4])
    {
        return false;
    }
}

это гарантирует, что у вас есть как минимум 5 элементов в массиве столбцов, прежде чем вы попытаетесь получить доступ к столбцу 5-го элемента [4] в проверке ==.

person Josh    schedule 04.12.2013
comment
я должен сопоставить идентификатор с 4-м столбцом - person Ali Elegant; 05.12.2013
comment
Из того, что вы сказали, в третий раз сквозной столбец содержит только 1 элемент. column[4] означает 5-й элемент в столбце массива строк. но возвращаясь к тому, что вы сказали, есть только 1 элемент, что означает, что столбец [0] является единственным элементом в массиве. Это именно то, что вызывает ваше исключение. Нам нужно знать, что id содержит или должен содержать, возможно, как выглядит ваш ввод, и, возможно, больше о методе, в котором содержится этот foreach. Что это за метод, который должен делать? - person Josh; 05.12.2013
comment
я только что отладил и проверил, идентификатор - это число, а столбец [4] содержит идентификатор в моем CSV-файле, поэтому мне нужно сопоставить идентификатор каждой строки в моем CSV-файле с четвертым столбцом. ты понял мою мысль? - person Ali Elegant; 05.12.2013