2013-03-13 86 views
0

我需要能够读取一行行的文本文件,并获得该行的内容时,它具有一定的文字开始,但它并不总是那里,它给了我空返回并影响我的datagridview。如何读取块的文本文件,返回的特定行

我想做一个方法,当它看到第一行(源:始终存在)并读取其他行时,将读取块中的数据,如果该行不存在,则设置与其关联的变量作为“”。

例如文本文件将是

源:C:\
MRU:1
MRU时间:12/12/2013

源:C:\
MRU:2
MRU时间:13/12/2013

源:C:\
MRU时间:二〇一三年十二月一十日
//注意到没有MRU

这里是我使用来获取行,如果它包含字符串代码:

String line = file.ReadLine(); 
if (line.StartsWith("source")) 
     { 
      richTextBox1.AppendText((line) + Environment.NewLine);   
     } 

     if (line.Contains("MRU")) 
     { 
      richTextBox1.AppendText((line) + Environment.NewLine); 
     } 

     if (line.Contains("MRU time")) 
     { 
      richTextBox1.AppendText((line) + Environment.NewLine); 
     } 
+0

我不知道我理解你的问题。你从上面的代码得到的结果是什么?首先,如果看起来您只在以“source”开头的行上进行所有处理,但您最多有3条可能的单独行,对吧?所以你需要3 if语句,if(line.StartsWith(“source”)),否则if(line.Contains(“MRU time”))和else if(line.Contains(“MRU”))。请注意,如果您需要区分具有MRU时间和MRU的线路,则需要按顺序排列它们。 – Melanie 2013-03-13 19:48:28

+0

基本上我需要读取'块'中的数据,其中第一行始终始于源,并以下一块之间的间隔结束。所以我做了如果声明来找到源代码,但是这贯穿所有的行,而不是'块' – 2013-03-14 11:32:08

回答

0

这里有一个控制台应用程序,并正是你需要的。只需改变它以适应您的需求。你的主要问题是你没有一个空检查。这也包含在较小的功能,所以它是一个更清洁(至少对我来说)

static void Main(string[] args) 
    { 
     ReadFile(); 
    } 

    private static void ReadFile() 
    { 
     StreamReader SR = new StreamReader(@"C:\Users\bharrison\Desktop\test.txt"); 
     Console.WriteLine("Reading file"); 
     while (!SR.EndOfStream) 
     { 
      string ReturnedValue = AnalyzeString(SR.ReadLine()); 
      Console.WriteLine(ReturnedValue); 
     } 
     Console.ReadLine(); 
    } 

    private static string AnalyzeString(string line) 
    { 
     string TempLine = line; 

     if (TempLine != null && TempLine != "") 
     { 

      if (TempLine.Contains("source")) 
      { 
       return TempLine; 
      } 

      if (TempLine.Contains("MRU")) 
      { 
       return TempLine; 
      } 

      if (TempLine.Contains("MRU Time")) 
      { 
       return TempLine; 
      } 
     } 
     else 
     { 
      return " "; 
     } 
     return " "; 
    } 
相关问题