根据起始行值检查文本文件中的特定行字数
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");
输出
【讨论】:
以上是关于根据起始行值检查文本文件中的特定行字数的主要内容,如果未能解决你的问题,请参考以下文章