根据起始行值检查文本文件中的特定行字数

Posted

技术标签:

【中文标题】根据起始行值检查文本文件中的特定行字数【英文标题】:Check specific row word count in text file based on starting row values 【发布时间】:2017-06-08 04:19:40 【问题描述】:

我有如下格式的文本文件:

0001EPP000000084906875   00000   0001 
0002EPP000000084906875   00016   0002
0003EPP000000084906875       

............


0001EPP000000084967647   00001  0002 
0002EPP000000077676678   00016  0002
0003EPP000000084777770       

我需要遍历所有行,找到以0001和0002开头的行需要得到与计数相同(0001,0002)的对应行字数,我会做进一步的计算... 为此,我已经这样做了:

string filename = string.Empty;
DirectoryInfo dir = new DirectoryInfo(path);
FileInfo[] TXTFiles = dir.GetFiles("*.txt");
foreach(var file in TXTFiles)

    filename = file.Name;



var reader = new StreamReader(filename);

foreach(string item in File.ReadAllLines(filename))

    // Here I need to check the file content 

请问,有人可以帮忙吗?如果行内容符合起始条件,如何识别行内容并获取字数?

【问题讨论】:

行标签是否分开?您可以将每一行拆分为一个字符串数组。然后分析items,if (items[0].Substring(0,4) == items[2]) 你知道 FileHelper 库吗?在操作文本文件(读取和写入,分隔和固定长度格式)时非常好和高效。 我不应该使用任何第三方库 如果您遇到异常,那么这就是您应该在问题中提出的问题!删除var reader = new StreamReader(filename); 行,因为您没有使用阅读器,它可能会锁定文件。在File.ReadAllLines()设置断点,看看filename的值是多少。确保它是文件的完整路径。 file.Name 只是文件名,不包括路径。你应该用file.FullName替换它。 【参考方案1】:

您可以更改几件事情,这些事情应该可以让您到达您想去的地方。

首先,您可以去掉StreamReader 行,因为File.ReadAllLines 是我们获取内容所需的全部内容。

其次,我们应该将处理文件的代码放在foreach (var file ... 循环中。否则,我们只处理最后一个文件。

第三,您应该将file.Name(只是文件名)替换为file.FullName(包括完整路径和文件名)。否则,您可能会得到一个FileNotFoundException,除非您碰巧在当前目录中搜索。

最后,在读取文件时,我们可以使用StartsWith 来检查该行是否以您要查找的文本开头,当我们找到我们想要的行时,我们可以使用string.Split 来中断它将空格字符放入数组中。然后,只需从一行中读取您关心的部分即可。

然后代码将如下所示:

var path = @"c:\public\temp";
DirectoryInfo dir = new DirectoryInfo(path);

foreach (var file in dir.GetFiles("*.txt"))

    foreach (var line in File.ReadAllLines(file.FullName))
    
        if (line.StartsWith("0001") || line.StartsWith("0002"))
        
            var lineParts = line.Split(new[]  ' ' , 
                StringSplitOptions.RemoveEmptyEntries);

            // This is assuming that the word count is in the column (which has index 2)
            if (lineParts.Length > 2)
            
                var wordCount = lineParts[2];
                Console.WriteLine($"Found data in file file.Name:");
                Console.WriteLine($" - Line starts with lineParts[0].Substring(0, 4)");
                Console.WriteLine($" - Has word count of wordCount");
            
        

    

输出

【讨论】:

以上是关于根据起始行值检查文本文件中的特定行字数的主要内容,如果未能解决你的问题,请参考以下文章

如何根据其中的值更新文本文件

根据行值python将大型csv文件拆分为多个文件

根据行位置从文本文件中打印行

满足特定条件时如何将行写入文本文件

在Linux中的特定行向文件添加文本[重复]

VB.net windows 应用程序根据多个唯一行值检索值