读取任何行从“//”开始的文本文件,省略此行并移至下一行。输入文本文件有一些单独的分区。逐行查找过程和此标记。
问问题
1154 次
3 回答
1
如果您使用的是 .Net 3.5,则可以将 LINQ 与包裹在 Stream Reader 周围的 IEnumerable 一起使用。这个很酷的部分,如果你可以只使用 where 语句来归档 statmen 或者更好的是使用带有正则表达式的 select 来修剪注释并将数据留在同一行。
//.Net 3.5
static class Program
{
static void Main(string[] args)
{
var clean = from line in args[0].ReadAsLines()
let trimmed = line.Trim()
where !trimmed.StartsWith("//")
select line;
}
static IEnumerable<string> ReadAsLines(this string filename)
{
using (var reader = new StreamReader(filename))
while (!reader.EndOfStream)
yield return reader.ReadLine();
}
}
...
//.Net 2.0
static class Program
{
static void Main(string[] args)
{
var clean = FilteredLines(args[0]);
}
static IEnumerable<string> FilteredLines(string filename)
{
foreach (var line in ReadAsLines(filename))
if (line.TrimStart().StartsWith("//"))
yield return line;
}
static IEnumerable<string> ReadAsLines(string filename)
{
using (var reader = new StreamReader(filename))
while (!reader.EndOfStream)
yield return reader.ReadLine();
}
}
于 2009-11-06T11:28:18.317 回答
0
Class SplLineIgnorStrmReader:StreamReader // derived class from StreamReader
SplLineIgnorStrmReader ConverterDefFileReadStream = null;
{
//created the Obj for this Class.
Obj = new SplLineIgnorStrmReader(strFile, Encoding.default);
}
public override string ReadLine()
{
string strLineText = "", strTemp;
while (!EndOfStream)
{
strLineText = base.ReadLine();
strLineText = strLineText.TrimStart(' ');
strLineText = strLineText.TrimEnd(' ');
strTemp = strLineText.Substring(0, 2);
if (strTemp == "//")
continue;
break;
}
return strLineText;
这是如果您想读取文本文件并省略该文件中的任何注释(此处排除“//”注释)。
于 2009-11-06T10:58:18.077 回答
0
我不确定您到底需要什么,但是,如果您只想从流中的某些文本中过滤掉 // 行...只需记住在使用流后关闭流。
public string FilterComments(System.IO.Stream stream)
{
var data = new System.Text.StringBuilder();
using (var reader = new System.IO.StreamReader(stream))
{
var line = string.Empty;
while (!reader.EndOfStream)
{
line = reader.ReadLine();
if (!line.TrimStart(' ').StartsWith("//"))
{
data.Append(line);
}
}
}
return data.ToString();
}
于 2009-11-06T11:22:36.997 回答