我有一个解析.txt文件的C#控制台应用程序。 txt文件的每一行都有4个值。因此,这里有一些示例:

c:\ecpg\myfolder\no_space.cfm           20160803   01:09:54   1574

c:\ecpg\myfolder\file with space.cfm           20160803   01:09:54   1574

c:\myfolder\.project                                             20170221   07:54:10   265


我正在使用以下内容基于每行中的空白进行拆分:

while ((line = file.ReadLine()) != null)
 {
    string[] parts = line.Split(new char[0], StringSplitOptions.RemoveEmptyEntries);
 }


问题是,在第2行的情况下,文件名中有一个空格,因此解析失败,因为现在我有5个值而不是4个值。如何防止这种情况发生?也许有某种方法可以检测是否存在。 (点)空格之后不久?

谢谢!

最佳答案

您可以使用Regex来split您的string,它将为您提供更好的输出。请检查我的代码:

while ((line = file.ReadLine()) != null)
{
    string[] parts = Regex.Split(line, @"(\s+\s+)");
}


另外我已经在DotNetFiddle中写过了,您可以检查一下。

编辑:我已经编辑了代码,它将涵盖您的所有情况。 New Solution Fiddle

while ((line = file.ReadLine()) != null)
{
    string partOne = Regex.Match(line, @"[a-z](.*)[a-z]").Value;
    //string[] parts = Regex.Split(line.Replace(partOne, ""), @"(\s+)");
    string[] parts;
    if (!string.IsNullOrEmpty(partOne))
    {
        parts = Regex.Split(line.Replace(partOne, ""), @"(\s+)");
    }
    else
    {
        parts = Regex.Split(line, @"(\s+)");
    }
}


最终代码:

List<string> parts = new List<string>();
while ((line = file.ReadLine()) != null)
{
    parts = new List<string>();
    //string partOne = Regex.Match(line, @"[A-Za-z](.*)[A-Za-z]").Value;
    //Update Regex for handle numeric value in part one.
    string partOne = Regex.Match(line, @"[A-Za-z](.*)([A-Za-z]|([A-Za-z]{1}[0-9]))(.*?)\s").Value.Trim();
    parts.Add(partOne);
    string[] fianlParts;
    if (!string.IsNullOrEmpty(partOne))
    {
        fianlParts = Regex.Split(line.Replace(partOne, ""), @"(\s+)");
    }
    else
    {
        fianlParts = Regex.Split(line, @"(\s+)");
    }

    foreach (string part in fianlParts)
    {
        if (!string.IsNullOrEmpty(part.Trim()))
        {
            parts.Add(part);
        }
    }

    Console.WriteLine(parts[0] + " " + parts[1] + " " + parts[2] + " " + parts[3]);
}

关于c# - C#控制台应用程序:捕获空白的某些情况,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42727203/

10-14 11:46