2012-04-12 67 views
0

您好我试图grep通过文件和计数行数,每行最大数量的空间和最长的行。如何检查从文件读取的字符是“/ n”?

如何我可以确定“/ n”字符,如果我通过char槽给定文件迭代字符?

非常感谢。

这里是我的代码,我用这个:其实

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(); 
} 
+2

斜杠是另一种方式,你需要单引号而不是双引号:) – dasblinkenlight 2012-04-12 13:23:32

+1

请提供你目前如何尝试的代码。 – 2012-04-12 13:30:46

回答

2

你不需要逐字符号:为了你的目的,一行一行就足够了,你可以让.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_lengthcurrent_MaximumSpaces,而不是清除它们只有当你看到一个换行符。

+0

谢谢我会试试这个! – AlexBerd 2012-04-12 13:44:51

+0

没错。 'current_length'应该在找到换行符的分支中清零。我不喜欢把一个字符与'null'比较,但那可能就是我。 – 2012-04-12 13:45:56

5
if(currentChar == '\n') 
    count++; 
+0

我用这个...它不起作用! 有没有办法做到这一点,如我们检查空间char:char.IsSpace() – AlexBerd 2012-04-12 13:24:12

+0

“它不工作”?什么“不起作用”呢? – Oded 2012-04-12 13:24:48

+0

@AlexanderBerdichevsky:您是否使用反斜杠而不是斜杠? – 2012-04-12 13:25:06

0

尽量比较Environment.NewLine

bool is_newline = currentChar.ToString().Equals(Environment.NewLine); 

我猜你换行\r\n(非Unix上)结束。您需要跟踪前一个/当前字符并查找\r\nEnvironment.NewLine

+0

你知道'Environment.NewLine'是一个由两个字符组成的字符串,所以它永远不会匹配单个字符? – 2012-04-12 13:31:13

+1

@MrLister - 你知道这取决于平台吗? – SwDevMan81 2012-04-12 13:32:08

+0

所有更多的理由不使用它! – 2012-04-12 13:36:05