所以我有代码需要检查文件是否已经每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
}
如何在流阅读器中添加换行符?
我会将所有行添加到List<string>
。(一行一行)检查列表中的每个项目(使用for
,而不是foreach
,因为我们将插入项目)。
如果列表中的某项超过50个字符。使用item.SubString(50)
向列表的下一个索引添加一个项目(第50个字符之后的所有字符串)。并使用YourList[i] = YourList[i].SubString(0,50)
切割当前索引项的最终值。
有人帮忙做了一个有趣的评论:你也可以创建一个StreamWriter来写你正在阅读的带有更正的流。然后获得生成的流并将其传递给所需的内容。
你不能写任何东西到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;
}
}
}