2013-05-07 43 views
1

因此,我需要檢查文件是否已經每50個字符分割一次的代碼。 99%的時間已經到了我已經分裂的地步,每行有50個字符,但是它有可能以單行的形式出現,我需要每50個字符添加一個換行符。該文件將始終以流的形式出現在我的面前。如何在符合條件的情況下將換行符添加到流讀取器

一旦我有格式正確的文件,我會根據需要處理它。

但是,我不確定如何檢查流是否格式正確。

這裏是我不得不檢查第一行中的代碼,如果大於50個字符(的指示符可以根據需要被分割)。

var streamReader = new StreamReader(s); 
var firstLineCount = streamReader.ReadLines().Count(); 
if(firstLineCount > 50) 
{ 
//code to add line breaks 
} 

//once the file is good 
using(var trackReader = new TrackingTextReader(streamReader)) 
{ 
//do biz logic 
} 

如何將換行符添加到流讀取器?

+0

你想寫一個** **讀者。聽起來很有趣。 – Dennis 2013-05-07 19:44:13

+0

通過streamReader.ReadLines()。Count()獲取文件中的行數,而不是一行中的字符數。 – 2013-05-07 19:46:18

回答

1

我將所有行添加到List<string>。 (逐行) 對列表中的每個項目進行檢查(使用for,而不是foreach,因爲我們將插入項目)。

如果列表中的某個項目超過50個字符。 使用item.SubString(50)(第50個字符後的所有字符串)將項添加到列表中的下一個索引。 並使用YourList[i] = YourList[i].SubString(0,50)在當前索引處剪下該項目的最後部分。


搞笑評論人沒有幫助這個: 您還可以創建一個StreamWriter寫你和更正讀取流。 然後你得到生成的流並將其傳遞給你所需要的。

1

無法寫入任何TextReader,因爲...這是一個閱讀器。這裏的選擇是使數據的形成以及副本:

private IEnumerable<string> GetWellFormedData(Stream s) 
    { 
     using (var reader = new StreamReader(s)) 
     { 
      while (!reader.EndOfStream) 
      { 
       var nextLine = reader.ReadLine(); 
       if (nextLine.Length > 50) 
       { 
        // break the line into 50-chars fragments and yield return fragments 
       } 
       else 
        yield return nextLine; 
      } 
     } 
    } 
相關問題