C#解析文本文件IF名称格式是所需的格式

时间:2010-05-29 02:11:06

标签: c# sql parsing

好的,我有解析并保存到sql db中的txt文件。名称格式为

R306025COMP_272A4075_20090929_080159.txt

但是,有少数(成千上万的文件)名称格式不同(特别是作为测试生成的文件),例如

R306025COMP_SU2_TestBottom_20090915_101441.txt

这对我造成问题的原因是我使用Split('_')[1,2,etc]来提取R编号,272A4075部分和20090929(日期)部分。当应用程序遇到奇怪命名的文件时,它会失败,因为它试图将“TestBottom”解析为日期并插入“SU2”而不是272号。

基本上我希望应用程序能够识别出如果文件名的格式不像我的第一个例子那样,请跳过它。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

您可以根据拆分执行以下操作:

string[] parsedLine = yourData.Split('_');
string theR = parsedLine[0];
string theCode = parsedLine[1];
string theDatePart = (parsedLine.Length > 4) ? parsedLine[3] : parsedLine[2];

如果你想要它只是跳过它,坏线就是这样做:

string[] parsedLine = yourData.Split('_');
if (parsedLine.Length > 4) continue;  // assuming your looping

如果您想要更好的解决方案,需要查看一些代码,因为我不确定您是如何获取行数据的。

答案 1 :(得分:1)

foreach (var fileName in fileNames) {
    if (fileName.Count(c => c == '_') != 3) continue;
    // etc...
}

答案 2 :(得分:1)

在文件名上使用正则表达式匹配,这意味着它将匹配文件名中任何位置的正则表达式(因此您不必担心字符串中出现的确切位置,并且提取的确切结果为您)。然后,如果找不到所需的匹配项,请跳过该文件(不会生成异常,只会在Matches对象中得不到任何内容)。

我会给你一个样本,但我现在没有VS方便。正则表达式的东西存在于System.Text.RegularExpressions命名空间中。