划界格式

时间:2012-05-07 17:51:22

标签: c# text delimiter

似乎无法在stackoverflow上的任何地方找到它,所以在这里:

我有一个文件,我想发现它是管道(|)还是逗号(,)分开。我还想告诉文本限定符是引号(“)还是什么都没有。任何人都有这样做的C#函数吗?谢谢!

3 个答案:

答案 0 :(得分:1)

这是我的头脑,并假设该文件具有相同数量的列,并且您有一个可能是分隔符的字符列表。

char[] delims = { '|', ',', ... };

获取行的子集,或整个文件(如果它足够小),并将它们存储在字符串数组中。

string[] lines = text.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);

循环分隔符,使用该分隔符将拆分条目的计数插入到一个int数组中:

int[] counts = lines.Select(s => s.Split(currentDelimiter).Length).ToArray();

使用您自己的方法查看所有计数彼此相等且均大于1.您所使用的分隔符是要使用的分隔符。

答案 1 :(得分:1)

对于像这样的文本分隔文件,我发现TextFieldParser是一个非常有用的工具。 (您可以导入visual basic dll以在C#应用程序中使用它。)

我将使用的一般策略,因为根据你的说法,每个文件有一个固定数量的列,就是选择一个分隔符并继续解析/读取行,直到一行的列数与前一行不同。当发生这种情况时切换到另一个分隔符(如果两者都无效,则不确定要执行的操作)。如果在第一行根本找不到分隔符,您可能还想丢弃分隔符。使用TextFieldParser并将HasFieldEnclosedInQuotes设置为true,您可以正确处理在引号中转义的字段(如果不使用引号,它仍然可以正常工作)。这比使用常规字符串操作时尝试手动处理引号更容易

答案 2 :(得分:0)

获取第一行(或第二行,如果第一行是带文件名的标题)。

然后您可以使用正则表达式检查可能的格式。即。

 Regex rePipesAndQualifier = ("[^|"]*"|);

如果rePipesAndQualifier.match(yourFileLine);返回多个非空匹配,那么您知道它使用管道作为分隔符并且具有分隔符。

制作更多正则表达式以检查逗号分隔以及是否使用限定符。

它取决于你期望得到的东西(所有分隔,只有字符串分隔)和你知道的(分隔符在开始和结束或仅在中间,字段的数量等等)。这就是为什么我不能给你一个确切的解决方案。