获取文件的下一行或写入C#中的上一行

时间:2013-12-16 22:03:47

标签: c# streamreader streamwriter peek

是否可以查看文件的下一行是什么或写入文件的上一行?

我正在阅读大约13,000行文件,如果一行与我的正则表达式匹配,那么我改变该行,如果没有,它保持不变。这些行将被写入新文件。它看起来像这样,大致当然。

//create Streamreader sr
//create Streamwriter sw
//loop through file by line
//if line matches REGEX, change it. Else, don't change it
//write line to new file
//if end of file, close sr and sw

我需要查看ENDREC的下一个,以便我可以在它之前写一个新行

如果当前行是ENDREC,我需要写入它之前的行。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

如果将整个文件加载到内存中不是问题,请尝试以下方法:

public void Test()
{
    string fileName = "oldFileName";
    string newFileName = "newFileName";
    string[] allLines = File.ReadAllLines(fileName);
    string changedLine = "Changed";
    var changedLines = allLines.Select(p => ((Regex.IsMatch(p, "test")) ? changedLine : p));
    File.WriteAllLines(newFileName, changedLines);
}

答案 1 :(得分:0)

这样的事情怎么样?

        var regex = new Regex(@"[a-zA-Z0-9_]+", RegexOptions.Compiled);

        using (var reader = File.OpenText("in.txt"))
        using (var writer = File.CreateText("out.txt"))
        {
            while (!reader.EndOfStream)
            {
                var line = reader.ReadLine();
                var match = regex.Match(line);

                if (match.Success)
                {
                    // Alter the line however you wish here.
                }

                writer.WriteLine(line);
            }
            writer.Flush();
        }