在加载到listview之前检测分隔的文本文件

时间:2016-03-24 08:23:59

标签: c#

我是编程新手,如果提前请原谅我。

我想知道是否有办法检测我在openfiledialogbox中打开的文本文件是否已分隔,然后使用StreamReader将其加载到listview中。

我是否必须阅读该文件的内容以确定这个或是否有一些.net foo?我的想法说我需要阅读整个文件以确定这一点。

OpenFileDialog ofd = new OpenFileDialog();
        if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {

            string fileToOpen = ofd.FileName;
            System.IO.StreamReader sr = new System.IO.StreamReader(fileToOpen);
            // Something more
        }

1 个答案:

答案 0 :(得分:2)

假设它是一个文本文件,通常,读取第一行就足以检查它的逗号,分号,制表符分隔数据。但是,您仍然需要自己决定,因为除了CSV,我不记得其余的有任何单一标准。编写X regexp,检查该行是否是您想要以特殊方式处理的X格式之一,并检查该行是否与这些规则中的任何一个匹配。或者更好,前3或5行。如果匹配,您也可以计算列数,通常它应该是每行不变。

...但总是存在歧义:单词标签字真的意味着它是用制表符分隔的吗?或者它只是随机文本而有人只是格式化了一些这样的东西?除非文件有一些(半)标准化的标题,否则很难猜到。 “确定性”只能通过读取整个文件并验证每行是否遵循格式。让我警告你:即使阅读整个文件,你也无法确定。考虑这一行(我的编辑很糟糕,这里有四个空格表示TAB字符):

Mary,"    had; a lit",tle    ;    lamb

是以分号分隔,制表符分隔还是标准化的CSV?

由于您无法决定一个行,因此您无法确定文件,因为您可以获得此类行的整个文件。简单地说,这些文本格式不是可自动检测的。

如果你不想写这样的“探测器”(我建议你这样做,那么为什么在没有考虑到这种情况下设计fileformat时为什么检测很难,这是一个简单而好的练习) - 然后我记得那个我曾经看过一个可以帮助你的技巧。我不知道它能检测到多少但可能值得一试。请see this thread about autodetection of mimetypesee here获取类型列表。例如,CSV为text/csv