2014-02-21 23 views
0

我想從C#中的輸入文件中讀取數據。以下是我的代碼。通過指定起點和終點從文件中讀取

public string ReadFromNewEntityFile() 
    { 
     string template=null; 
     StringBuilder s = new StringBuilder(); 
     //char[] sourcesystemhost=null; 
     string inputFileName = ConfigurationManager.AppSettings["inputNewEntityFilePath"].ToString(); 
     System.IO.StreamReader myFile; 
     try 
     { 
      myFile = new System.IO.StreamReader(inputFileName); 
      myFile.ReadLine(); 
      while ((template = myFile.ReadLine()) != "[[END SourceSystemHost]]") 
      { 
       s.AppendLine(template); 
      } 
     } 
     catch (Exception ex) 
     { 
      log.Error("In Filehandler class :" + ex.Message); 
      throw new Exception("Input file not read" + ex.Message); 
     } 
     return template; 
    } 

問題是想要指定讀取內容的起點和終點。在這裏,我只能指定終點。我如何指定起點?

請幫

+3

是以字節,行或字符指定的起始點嗎?或通過一個sentinel字符串?它很重要 –

+0

@MarcGravell哇..非常好。我剛剛發佈了一個「Seek」示例..我真的得更好地尋求這樣的澄清。 –

+0

請不要在標題中包含languge標籤,除非在沒有標籤的情況下才有意義。標籤用於此目的。 –

回答

3

假設你的開始/結束「點」其實是行,你基本上需要從一開始就閱讀並直到你到達正確的跳過線。下面是使用File.ReadLines做一個簡單的方法:

var lines = File.ReadLines(inputFileName) 
       .SkipWhile(line => line != "[[START SourceSystemHost]]") 
       .Skip(1) // Skip the intro line 
       .TakeWhile(line => line != "[[END SourceSystemHost]]"); 
+0

Readlines不是System.IO.StreamReader的標識方法 – user2124167

+0

我不得不使用System.IO – user2124167

+2

@ user2124167:或者使用'System.IO.File.ReadLines',當然 - 但它通常是一個對於文件中使用的每個名稱空間都有'using'指令。 –

1

你可以使用File.ReadLines這不相同,但更具可讀性。然後使用LINQ找到您的起點和終點:

var range = File.ReadLines(inputFileName) 
    .SkipWhile(l => !l.TrimStart().StartsWith("[[Start SourceSystemHost]]")) 
    .TakeWhile(l => !l.TrimStart().StartsWith("[[END SourceSystemHost]]")); 

string result = string.Join(Environment.NewLine, range);