如何检查从文件中读取的字符是否为“/n”
本文关键字:是否 字符 读取 何检查 检查 文件 | 更新日期: 2023-09-27 18:31:05
嗨,我正在尝试 grep 文件并计算行数、每行最大空格数和最长行数。
如果我通过给定文件逐个字符迭代字符,我如何确定"/n"字符?
多谢。
这是我用于此目的的代码:
using (StreamReader sr = new StreamReader(p_FileName))
{
char currentChar;
int current_length=0,current_MaximumSpaces=0;
p_LongestLine=0;
p_NumOfLines=0;
p_MaximumSpaces=0;
while (!sr.EndOfStream){
currentChar=Convert.ToChar(sr.Read());
current_length++;
if(Char.IsWhiteSpace(currentChar) || currentChar==null){
current_MaximumSpaces++;
}
if(currentChar == ''n'){
p_NumOfLines++;
}
if(current_length>p_LongestLine){
p_LongestLine=current_length;
}
if(current_MaximumSpaces>p_MaximumSpaces){
p_MaximumSpaces=current_MaximumSpaces;
}
current_length=0;
current_MaximumSpaces=0;
}
sr.Close();
}
if(currentChar == ''n')
count++;
您不需要逐个字符:出于您的目的,逐行就足够了,并且您可以获得 .NET 来处理依赖于系统的换行符作为额外的奖励。
int maxLen = -1, maxSpaces = -1;
foreach ( var line in File.ReadLines("c:''data''myfile.txt")) {
maxLen = Math.Max(maxLen, line.Length);
maxSpaces = Math.Max(maxSpaces, line.Count(c => c == ' '));
}
编辑:由于与您检查''n'
无关的错误,您的程序无法正常工作:您将每个字符后的current_length
和current_MaximumSpaces
归零,而不是仅在看到换行符时才清除它们。
尝试与Environment.NewLine
进行比较
bool is_newline = currentChar.ToString().Equals(Environment.NewLine);
我猜你换行符实际上是'r'n
(非 Unix)结尾。 您需要跟踪以前/当前的字符并查找'r'n
或Environment.NewLine
。