Я пытаюсь импортировать огромный файл csv в свое приложение wpf, но после импорта получаю ошибку массива System.IndexOutOfRangeException - PullRequest
0 голосов
/ 19 июня 2020

Итак, вот код, который начинается с получения и установки из каждого заголовка. CSV имеет 16 элементов столбца, но более 100 элементов строки.

public class Cloths
        {
            public string Hauptartikelnr { get; set; }
            public string Artikelname { get; set; }
            public string Hersteller { get; set; }
            public string Beschreibung { get; set; }
            public string Materialangaben { get; set; }
            public Gender Geschlecht { get; set; }
            public string Produktart { get; set; }
            public string Aermel { get; set; }
            public string Bein { get; set; }
            public string Kragen { get; set; }
            public string Herstellung { get; set; }
            public string Taschenart { get; set; }
            public string Grammatur { get; set; }
            public string Material { get; set; }
            public string Ursprungsland { get; set; }
            public string Bildname { get; set; }
        }
public enum Gender
        {
            Herren,
            Damen,
            Kind
        }

И вот где начинается ошибка, поэтому после при импорте файла csv я получаю ошибку System.IndexOutOfRangeException, и все массивы отмечены.

public static class CSVTable
        {
            public static List<Cloths> ReadFile(string filepath)
            {
                var lines = File.ReadAllLines(filepath);

                var data = from l in lines.Skip(1)
                           let split = l.Split(';')
                           select new Cloths
                           {
                               Hauptartikelnr = split[0],
                               Artikelname = split[1],
                               Hersteller = split[2],
                               Beschreibung = split[3],
                               Materialangaben = split[4],
                               Geschlecht = (Gender)Enum.Parse(typeof(Gender), split[5]),
                               Produktart = split[6],
                               Aermel = split[7],
                               Bein = split[8],
                               Kragen = split[9],
                               Herstellung = split[10],
                               Taschenart = split[11],
                               Grammatur = split[12],
                               Material = split[13],
                               Ursprungsland = split[14],
                               Bildname = split[15]


                           };

                return data.ToList();
            }
        }

Если вам нужна и другая информация, просто спросите меня, я действительно хочу решить эту проблему

1 Ответ

1 голос
/ 19 июня 2020

Я не могу сказать вам, в чем именно заключается ошибка, но, как уже сказал Джек Хьюз , возможно, что не все ваши строки действительно имеют 16 столбцов.

Кажется, вы затрудняйтесь найти точку, так как несколько строк помечаются красным, когда выдается ошибка. Таким образом, вы можете разделить свой лог c, чтобы установить data следующим образом:

var data = new List<Cloths>();
foreach (var line in lines.Skip(1))
{
    var split = line.Split(";");
    if(split.Length != 16)
    {
        continue;
    }

    var cloths = new Cloths();
    cloths.Hauptartikelnr = split[0];
    cloths.Artikelname = split[1];
    cloths.Hersteller = split[2];
    cloths.Beschreibung = split[3];
    cloths.Materialangaben = split[4];
    cloths.Geschlecht = (Gender)Enum.Parse(typeof(Gender), split[5]);
    cloths.Produktart = split[6];
    cloths.Aermel = split[7];
    cloths.Bein = split[8];
    cloths.Kragen = split[9];
    cloths.Herstellung = split[10];
    cloths.Taschenart = split[11];
    cloths.Grammatur = split[12];
    cloths.Material = split[13];
    cloths.Ursprungsland = split[14];
    cloths.Bildname = split[15];

    data.Add(cloths);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...