我有两种类型的输入文件: 1.逗号分隔(即:lastName,firstName,Address) 2.空格分隔(即lastName firstName地址)
以逗号分隔的文件在','之间有空格。和下一个词。
如何确定我要处理的文件? 我正在使用C#btw
答案 0 :(得分:1)
我已经完成了大量使用各种分隔文件类型的工作,正如其他人所说的那样,没有规范化,你无法以编程方式处理整个事情。
通常(并且看起来对于space-delim来说它是完全必要的)分隔文件将具有文本限定符字符(通常是双引号)。这几点有几个例子:
Space Space:
lastName“Von Marshall”是不可能的 没有限定词。
地址完全不可能。
逗号分隔:
地址通常是不可行的,除非它们分成单独的字段或者您的用例可以使用实心字符串。
所以空间分隔应该很容易确定,因为你正在寻找" "
。如果是这种情况,我(个人)将所有" "
替换为","
,将其更改为逗号分隔。这样你只需构建一个处理文本的方法,否则我想你需要单独使用空格和逗号的方法。
如果您的逗号分隔文件没有文本限定符,那么您处于一个非常棘手的位置。我没有找到任何“完美”的方法来解决这个问题,没有任何人工,但它可以最小化。我已经使用Notepad ++来批量替换它的正则表达式函数。
但是,您也可以使用C#的正则表达式功能。 Here's what MSDN says on that. 所以,要尽我所能回答你的问题,除非你能在两种文件类型之间建立唯一性 - 没有办法。但是,如果文本具有适当的文本限定符,则文件具有不同的文件扩展名,或者如果在不同的目录中生成 - 您可以使用这些质量中的任何一种或其混合来决定它是什么类型的文件。我还没有这方面的经验(虽然我刚刚开始使用它的项目),所以我不能给出一个确切的例子,但我可以说任何人都可以建立一个完美的例子,如果你展示它是最好的每个文件的示例字符串。
答案 1 :(得分:0)
正如其他用户所说的那样,保证在空格分隔版本中没有逗号,你不能100%准确。
通过一些信息,假设在正确解析的所有情况下,所有记录总会有三个字段,您可以同时执行这两个字段并测试结果以获得正确数量的字段。地址是一个很大的障碍,因为我们不知道那种格式是什么。在谈论地址时,这些规则最多也是奇怪的......
1111somestreest.houston,tx11111 or
1111 somestreet st. Houston, Tx 11111
有效格式?
答案 2 :(得分:0)
您可以计算文件每行的逗号数。如果每行至少有2个逗号(考虑到您的信息是姓氏,名字,地址),则可能以逗号分隔。如果您在至少一行中少于2个逗号,则应将其视为空格分隔。
但是,我会跳过这一步并在评估输入时忽略逗号,方法是用空格替换所有输入,并实现单个读取/抓取信息过程(仅考虑空格分隔文件)。