Сортировка файла CSV

поэтому я прочитал CSV-файл на C# и проделал с ним определенные манипуляции, при этом конечный файл получил имя: keepedLines, тип «var». Прежде чем я запишу этот файл на свой жесткий диск, я хочу отсортировать его второй столбец. Я попробовал пример: Сортировка CSV-файла, но это не сработало, вместо этого я получаю ошибку обработки . Это часть моего кода, на которой я застрял:

String inputpath = textBox1.Text;

if (File.Exists(inputpath))
{
    //MessageBox.Show(inputpath, outputpath);    
    var retainedLines = File.ReadAllLines(inputpath)
        .Where((x, i) => i == 0 
            || (x.Split(',')[1]).Contains(checkCritical())
            || (x.Split(',')[1]).Contains(checkWarning())
            || (x.Split(',')[1]).Contains(checkMajor())
            || (x.Split(',')[1]).Contains(checkClear())       
            );

    if (inputpath.Equals(outputpath))
    {
        File.Delete(inputpath);
    }

    //here is where I want to sort the file alphabetically by second column
    File.WriteAllLines(outputpath, retainedLines);
}

person XenonDragon    schedule 08.07.2014    source источник
comment
Как файл может быть типа var? Более того, var — это даже не тип. Кроме того, вы не можете сообщить нам об ошибке, не указав, что это за ошибка.   -  person Tarec    schedule 08.07.2014
comment
LINQ является решением здесь.   -  person Dominik Antal    schedule 08.07.2014


Ответы (1)


Вы можете сделать сортировку следующим образом:

retainedLines = retainedLines.OrderBy(line => line.Split(',')[1]);

Но я бы реорганизовал первый код, чтобы он не вызывал метод Split каждый раз для фильтрации, вместо этого:

var retainedLines = File.ReadAllLines(inputpath)
    .Select(x => x.Split(','))
    .Where((x, i) => i == 0 
        || (x[1]).Contains(checkCritical())
        || (x[1]).Contains(checkWarning())
        || (x[1]).Contains(checkMajor())
        || (x[1]).Contains(checkClear())       
        )
    .OrderBy(x => x[1])
    .Select(parts => string.Join(",", parts);
person Selman Genç    schedule 08.07.2014