C# 在加载到listview之前检测带分隔符的文本文件

C# 在加载到listview之前检测带分隔符的文本文件,c#,C#,我是编程新手,请原谅我提前 我想知道在使用StreamReader将文本文件加载到listview之前,是否有方法检测我在openfiledialogbox中打开的文本文件是否被分隔 我必须读取文件的内容才能确定这一点,还是存在一些.NETFoo?我的想法是我需要阅读整个文件来确定这一点 OpenFileDialog ofd = new OpenFileDialog(); if (ofd.ShowDialog() == System.Windows.Forms.DialogRes

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

我想知道在使用StreamReader将文本文件加载到listview之前,是否有方法检测我在openfiledialogbox中打开的文本文件是否被分隔

我必须读取文件的内容才能确定这一点,还是存在一些.NETFoo?我的想法是我需要阅读整个文件来确定这一点

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
        }

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

。。。但总是有歧义:tab这个词真的意味着它是以tab分隔的吗?或者可能只是随机文本,有人只是格式化了其中的一些内容?除非文件有一些(半)标准化的标题线,否则很难猜测。“确定性”只有通过读取整个文件并验证每一行是否符合格式才能实现。但我要警告你们:即使阅读整个文件,你们也不能确定。考虑这条线(我的编辑器吸吮,这里四个空格表示制表符):

它是分号分隔的、制表符分隔的还是标准化的CSV

因为你不能决定一行,所以你不能决定一个文件,因为你可以得到这样一行的整个文件。。简单地说,这些文本格式不是为自动检测而设计的


如果您不想编写这样的“检测器”(我建议您这样做,这是一个简单而好的练习,可以了解为什么在设计文件格式时很难进行检测),那么我记得我曾经看到过一个可能对您有所帮助的技巧。我不知道它能检测到多少,但可能值得一试。请和查看类型列表。例如,CSV是
text/CSV

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

。。。但总是有歧义:tab这个词真的意味着它是以tab分隔的吗?或者可能只是随机文本,有人只是格式化了其中的一些内容?除非文件有一些(半)标准化的标题线,否则很难猜测。“确定性”只有通过读取整个文件并验证每一行是否符合格式才能实现。但我要警告你们:即使阅读整个文件,你们也不能确定。考虑这条线(我的编辑器吸吮,这里四个空格表示制表符):

它是分号分隔的、制表符分隔的还是标准化的CSV

因为你不能决定一行,所以你不能决定一个文件,因为你可以得到这样一行的整个文件。。简单地说,这些文本格式不是为自动检测而设计的


如果您不想编写这样的“检测器”(我建议您这样做,这是一个简单而好的练习,可以了解为什么在设计文件格式时很难进行检测),那么我记得我曾经看到过一个可能对您有所帮助的技巧。我不知道它能检测到多少,但可能值得一试。请和查看类型列表。例如,CSV是
text/CSV

您需要读取一个文件来验证其中的内容。根据您的问题,您可能可以从文件扩展名中假定它,但在解析内容之前,您永远不会真正知道。谢谢您的及时回复。我想我必须阅读全部内容才能确认我只是想听听别人的意见。非常感谢。您需要阅读一个文件来验证其中的内容。根据您的问题,您可能可以从文件扩展名中假定它,但在解析内容之前,您永远不会真正知道。谢谢您的及时回复。我想我必须阅读全部内容才能确认我只是想听听别人的意见。非常感谢你。
Mary,"    had; a lit",tle    ;    lamb