如何使用c#编辑和替换文本文件的一组行?

时间:2013-09-17 15:25:19

标签: c# text-files

我有一个大文本文件(20MB),我正在尝试更改每个 4th & 5th 行到0,0

enter image description here

我尝试使用以下代码,但我很想知道是否有更好的方法可以做到这一点。

修改

        Power = new List<float>();
        Time = new List<float>();

        string line;
        float _i =0.0f;
        float _q =0.0f;
        int counter = 0;
        StreamReader file = new StreamReader(iqFile2Open);
        while ((line = file.ReadLine()) != null)
        {
            if (Regex.Matches(line, @"[a-zA-Z]").Count == 0)
            {
                string[] IQ = line.Split(',');
                if (IQ.Length == 2)
                {
                    _i = float.Parse(IQ[0]);
                    _q = float.Parse(IQ[1]);
                    double _p = 10 * (Math.Log10((_i * _i) + (_q * _q)));

                    if((counter%4)==0 || (counter%5)==0)
                        sw.WriteLine("0,0");
                    else
                    sw.WriteLine(string.Format("{0},{1}", _i, _q));

                    counter++;
                }
            }                
        }

提前致谢。

2 个答案:

答案 0 :(得分:3)

你可以阅读所有的行,根据它的位置将每一行映射到它应该是什么,然后将它们全部写出来:

var lines = File.ReadLines(inputFile)
    .Select((line, i) => ComputeLine(line, i + 1));

File.WriteAllLines(outputFile, lines);

对于实际的映射,您可以将行号修改为5以获得“每第5项”结果,然后将结果与您关注的两个mod值进行比较。请注意,由于您不希望第一个项目被删除,因此索引是1索引的,而不是零索引是很重要的。

private static string ComputeLine(string line, int i)
{
    if (i % 5 == 4 || i % 5 == 0)
        return "0,0";
    else
        return line;
}

这会流经文件中的每一行,而不是将整个文件加载到内存中。因此,输入和输出文件不同是很重要的。如果需要,您可以将输出文件复制到输入文件,或者您可以使用ReadAllLines将整个文件放入内存(假设文件保持适当的小),从而允许您写入您从中读取的同一文件

答案 1 :(得分:-3)

你究竟想要取代什么?您是要替换特定的LINE还是特定的TEXT?

如果您要替换特定文本,可以轻松地执行string.Replace()方法...

StreamReader fileIn = new StreamReader("somefile");
string fileText = fileIn.Readlines();
fileText = fileText.Replace("old", "new");
//Repeat last line for all old strings.
//write file...