Datatable не показывает строки при чтении файла TSV - PullRequest
0 голосов
/ 24 апреля 2019

enter image description here AM, читающий файл .tsv, имеющий около 3500 столбцов и 1000 строк. Когда я добавляю строки в таблицу данных, строки успешно добавляются в таблицу данных (я вижу datatable.Rows.Count is увеличивается) но таблица данных не показывает никаких данных. Я ссылался на различные статьи, но все еще вижу ту же проблему, любые предложения помогут мне

static void Main(string[] args)
    {
        DataTable datatable = new DataTable();
        StreamReader streamreader = new StreamReader(@"C:\Users\Latest PM File.tsv");
        char[] delimiter = new char[] { '\t' };
        string[] columnheaders = streamreader.ReadLine().Split(delimiter);
        foreach (string columnheader in columnheaders)
        {
            datatable.Columns.Add(columnheader); // I've added the column headers here.
        }

        while (streamreader.Peek() > 0)
        {
            DataRow datarow = datatable.NewRow();
            datarow.ItemArray = streamreader.ReadLine().Split(delimiter);
            datatable.Rows.Add(datarow);
        }
}

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

В ответ на ваш комментарий на мой другой ответ:

Ваш TSV содержит 5735 столбцов. Визуализатор моего набора данных останавливается (падает ??) после 655 столбцов. Данные есть; это можно увидеть в ближайшем окне:

enter image description here

Примечания на этом скриншоте:

  • Некоторые из ваших заголовков столбцов идентичны и вызывают ошибку «столбец уже принадлежит таблице». Я добавил увеличивающийся номер в конце имени, чтобы решить эту проблему (выделено желтым hdr переменная
  • Вы можете видеть в фрагменте визуализатора, что он поднялся до столбца 655 (0-654) и потерпел крах / остановлен

И дальнейшее наблюдение:

Тестовый файл, который вы опубликовали, не содержит более 57 столбцов данных. Если это верно для всего файла, некоторые исправления данных могут быть в порядке. Как видно, список заголовков столбцов содержит дубликаты; если данные искажены для представления по диагонали (добавлен новый столбец для данных, которые должны быть в существующем столбце), возможно, вам придется приложить больше усилий, чтобы вернуть их к минимальному количеству столбцов. Сбор данных с почти 6000 столбцами будет полной проблемой в вопросе

0 голосов
/ 24 апреля 2019

Если это поможет, я не смог воспроизвести вашу проблему:

enter image description here

Ни в этой упрощенной версии (первая строка не рассматривается как заголовки):

enter image description here

Вот немного более простой код, который я использовал:

class Program
{
    static void Main(string[] args)
    {
        DataTable dt = new DataTable();
        for (int i = 0; i < 3; i++)
            dt.Columns.Add("col" + i);

        foreach (var line in File.ReadAllLines(@"C:\temp\a.tsv"))
            dt.Rows.Add(line.Split('\t'));

        int c = dt.Rows.Count; //not necessary, just makes for an easy place to put a breakpoint
    }
}

Хотите знать, какой результат вы получите, если вставить его дословно. Возможно, ваш визуализатор набора данных неисправен (перезапустите VS?)

Попробуйте ввести это в «Немедленное окно»:

?datatable.Rows[0].ItemArray

Вы должны увидеть рендеринг массива в виде текста:

enter image description here

Если это так, приступайте к кодированию; таблица данных содержит данные, просто ваш визуализатор по какой-то причине не показывает ее.

пс; Я попадаю в визуализатор, указывая на «datatable», затем нажимая лупу во всплывающей подсказке

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