C# 如何检查从文件中读取的字符是否为“/n”?

C# 如何检查从文件中读取的字符是否为“/n”?,c#,string,C#,String,嗨,我正试图通过grep浏览文件并计算行数、每行的最大空格数和最长行数 如果通过给定的文件逐字符迭代,如何确定/n字符 非常感谢 以下是我用于此目的的代码: using (StreamReader sr = new StreamReader(p_FileName)) { char currentChar; int current_length=0,current_MaximumSpaces=0; p_LongestLine=0; p_NumOfLine

嗨,我正试图通过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();
}
试着比较


我猜您的新行实际上是\r\n非Unix结尾。您需要跟踪上一个/当前的字符,并查找\r\n或Environment.NewLine。

您不需要逐个字符:就您的目的而言,逐行进行就足够了,您可以使用.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”无关的错误,您的程序无法运行:您正在将每个字符后的当前\u长度和当前\u最大空格归零,而不是仅在看到换行符时才将其清除。

斜杠的方向相反,你需要单引号而不是双引号:请提供你目前如何尝试这样做的代码。我用了这个。。。它不起作用!我们无法像检查char:char这样执行此操作。IsSpace@AlexanderBerdichevsky:你用反斜杠而不是正斜杠了吗?@AlexanderBerdichevsky:请显示你试过的代码。这样就更容易找到错误。@AlexanderBerdichevsky char.isSpace不会精确检查操作数是否为空格字符;对于换行符,它也返回true…包含解析代码片段和正在解析的文件可能会有所帮助。我要问的第一个问题-你确定文件中的行以换行符结尾吗?你知道这个环境。换行符是由两个字符组成的字符串,所以它永远不会匹配单个字符?@MrLister-你知道这取决于平台吗?更不用它了@所以你不想使用足够灵活的东西来检测换行符?我是说你的代码在Windows下不工作。它将字符串\n与字符串\r\n进行比较,后者将返回false。当前_长度应在找到换行符的分支中调零。我不喜欢将char与null进行比较,但这可能只是我自己。
bool is_newline = currentChar.ToString().Equals(Environment.NewLine);
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 == ' '));
}