读取tsv文件时,数据表不显示行

时间:2019-04-24 07:12:46

标签: c# datatable

enter image description here AM读取.tsv文件,该文件具有约3500列和1000行,当我向数据表中添加行时,行已成功添加到数据表中(我看到datatable.Rows.Count正在增加),但是数据表未显示任何数据。我已经推荐了多篇文章,仍然看到同样的问题,任何建议对我都有帮助

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 个答案:

答案 0 :(得分:1)

针对您对我的其他答案的评论:

您的TSV包含5735列。我的数据集可视化器在655列后停止(崩溃?)。数据在那里;可以在立即窗口中看到它:

enter image description here

此屏幕截图的注意事项:

  • 您的某些列标题相同,并导致出现“列已属于表”错误。我在名称末尾添加了一个递增数字来解决此问题(突出显示的黄色hdr变量
  • 您可以在可视化工具的片段中看到,它已经达到655列(0-654)并崩溃/停止了

进一步观察:

您发布的测试文件似乎不包含超过57列的数据。如果对于整个文件都是如此,则可能需要进行一些数据修复。观察到,列标题列表包含重复项;如果数据被扭曲成对角表示(为应该在现有列中的数据添加了新列),则可能需要付出更多努力才能将其恢复为最小列数。包含将近6000列的数据表将是查询工作的全部难题

答案 1 :(得分:0)

如果有帮助,我无法重现您的问题:

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

如果是,请继续进行编码;数据表中包含的数据只是您的可视化器由于某种原因未显示。

ps;我进入可视化器,方法是指向“数据表”,然后单击工具提示中的放大镜