2016-04-25 36 views
-1

我有以下代码我想要这行以及下面2行如何做到这一点。请帮助,我想要最后的号码,请参阅下面的文本。如何在文本文件中获取两行以上的文本

static void Main() 
{ 
    int counter = 0; string line; 
    StringBuilder sb = new StringBuilder(); 

    using (System.IO.StreamReader file = new System.IO.StreamReader(@"E:\file\log.txt")) 
    { 
     while ((line = file.ReadLine()) != null) 
     { 
      if (line.Contains(DateTime.Now.Date.ToShortDateString())) 
      {   
       sb.AppendLine(line.ToString()); 
      } 
     } 
    } 

    Console.WriteLine(sb.ToString()); 
    Console.ReadKey(); 
} 

*****来电:25/04/2016 - 11:45 *****

NAME:测试

NUMBER:(425)555-1212

*****来电:25/04/2016 - 11:45 *****

NAME:Test2的

NUMBER:(425)544-1213

回答

0
static void Main() 
     { 
      int counter = 0; string line; 

      List<string> ss = new List<string>(); 
      using (System.IO.StreamReader file = new System.IO.StreamReader(@"E:\file\log.txt")) 
      { 
       while ((line = file.ReadLine()) != null) 
       { 

        if (line.Contains(DateTime.Now.Date.ToShortDateString())) 
        { 
         ss.Add(line);      
         line = file.ReadLine(); 
         if (line != null) 

          ss.Add(line); 
         line = file.ReadLine(); 
         if (line != null)       
          ss.Add(line); 

        } 
       } 
      } 

      var item = ss.LastOrDefault();    
      string number = item.Substring(0, 24).Replace("NUMBER:", "").Trim(); 
      Console.WriteLine(number); 
      Console.ReadKey(); 
} 
4

只需再次调用file.ReadLine两次,但检查返回的字符串是否为空是非常重要的,因为您可能会遇到意外的文件结尾,并且您的代码不再受条件中的检查保护

... 
using (System.IO.StreamReader file = new System.IO.StreamReader(@"E:\file\log.txt")) 
{ 
    while ((line = file.ReadLine()) != null) 
    { 
     if (line.Contains(DateTime.Now.Date.ToShortDateString())) 
     { 

      sb.AppendLine(line); 
      line = file.ReadLine(); 
      if(line != null) sb.AppendLine(line); 
      line = file.ReadLine(); 
      if(line != null) sb.AppendLine(line); 
     } 
    } 
} 

如果你想要得到的只是最后三个行(假设你的文件格式完全正确),那么你可以添加的StringBuilder的复位循环

using (System.IO.StreamReader file = new System.IO.StreamReader(@"E:\file\log.txt")) 
{ 
    while ((line = file.ReadLine()) != null) 
    { 
     if (line.Contains(DateTime.Now.Date.ToShortDateString())) 
     { 
      // This will remove the previous data and keep 
      // just the last three lines..... 
      sb.Length = 0; 
      sb.AppendLine(line); 
      line = file.ReadLine(); 
      if(line != null) sb.AppendLine(line); 
      line = file.ReadLine(); 
      if(line != null) sb.AppendLine(line); 
     } 
    } 
} 

在替代里面,但我不当然,如果从性能的角度来看这是一个好主意(特别是ular如果我们谈论一个大文件),我们可以使用LINQ这样

string result = string.Join(Environment.NewLine, 
       File.ReadLines(@"E:\file\log.txt").Reverse().Take(3)); 
+0

我想最后一个如何得到这个 –

+0

对不起,我不明白您的评论 – Steve

相关问题