如何编辑文本文档中的特定行?

时间:2013-12-25 08:25:38

标签: c# file text

有人能告诉我如何编辑文本文档中的特定行吗? 例如,假设我的文档包含两个电话号码:

“0889367882

0887343160"

我想删除第二个号码并写一个新的电话号码,我该怎么做? 我正在打印文档中的文本,但我不知道如何选择要编辑的行 以及如何做到这一点。

    string path = @"C:\Users\...\text1.txt";
    string[] lines = File.ReadAllLines(path);
    int i = 0;

    foreach (var line in lines)
    {
        i++;
        Console.WriteLine("{0}. {1}", i, line);
    }

谢谢!

3 个答案:

答案 0 :(得分:1)

只需使用string.replace

像这样:

if(line.Contains("0887343160")
    line = line.Replace("0887343160", "0889367882");

并在replacing之后,将所有行写回文件中。

答案 1 :(得分:1)

更好的版本是迭代文件中的行而不是将整个文件行加载到内存中。因此,使用迭代器在这里会做得最好。

我们对迭代器对象执行MoveNext(),并在执行必要的替换逻辑后将迭代器指向的当前行写入文件。

StreamWriter wtr = new StreamWriter("out.txt");
var e = File.ReadLines(path).GetEnumerator();
int lineno = 12; //arbitrary
int counter = 0;
string line = string.Empty;
while(e.MoveNext())
{
    counter++;
    if(counter == lineno)   
        line = replaceLogic(e.Current); 
    else
        line = e.Current;
    wtr.WriteLine(line);
}
wtr.Close();

答案 2 :(得分:0)

解决方案1:如果您想根据用户输入String(与文件中的某一行匹配)删除该行,您可以尝试这样做。

        string path = @"C:\Data.txt";
        string[] lines = File.ReadAllLines(path);
        String strRemove = "8971820518";
        List<String> lst = new List<String>();
        for(int i=0;i<lines.Length;i++)
        {
            if (!lines[i].Equals(strRemove))  //if string is part of line use Contains()
            {
                lst.Add(lines[i]);
            }
        }
        File.WriteAllLines(path,lst.ToArray());

解决方案2 :如果您想根据用户输入LineNO删除该行(与文件中的确切行号匹配),您可以尝试使用

        string path = @"C:\Data.txt";
        string[] lines = File.ReadAllLines(path);
        int  iRemoveLineNo = 6;
        List<String> lst = new List<String>();
        for(int i=0;i<lines.Length;i++)
        {
            if (iRemoveLineNo-1!=i)
            {
                lst.Add(lines[i]);
            }
        }
        File.WriteAllLines(path,lst.ToArray());