如何在文本文件中逐行读取和替换字符串?

Don*_*von 7 c# file

我有一个文本文件,读取:

INSERT INTO `shops` VALUES ('', '3', '1000000', '0');
INSERT INTO `shops` VALUES ('', '3', '1000010', '0');
INSERT INTO `shops` VALUES ('', '3', '1000020', '0');
INSERT INTO `shops` VALUES ('', '3', '1000030', '0');
INSERT INTO `shops` VALUES ('', '3', '1001000', '0');
Run Code Online (Sandbox Code Playgroud)

请注意每行第一个键是''.对于每一行,我想找到'',并用数字(从1开始)替换它,然后在它进入下一行时加1,如下所示:

INSERT INTO `shops` VALUES ('1', '3', '1000000', '0');
INSERT INTO `shops` VALUES ('2', '3', '1000010', '0');
INSERT INTO `shops` VALUES ('3', '3', '1000020', '0');
INSERT INTO `shops` VALUES ('4', '3', '1000030', '0');
INSERT INTO `shops` VALUES ('5', '3', '1001000', '0');
Run Code Online (Sandbox Code Playgroud)

我一直试图这样做几个小时,但我失败了.

这就是我一直在想的(我知道这远非正确,但我在c#中并不精通,所以也许你们中的一个可以帮我提出正确的代码):

string text = File.ReadAllText("C:\\Users\\Donavon\\Desktop\\old.sql");

int i = 0;
text = text.Replace("('',", "('" + i + "',");
i++;
File.WriteAllText("C:\\Users\\Donavon\\Desktop\\new.sql", text);
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助,非常感谢

Tre*_*ley 8

你会想要沿着这些方向做点什么:

var lineNumber = 0;

using (var newFile = File.AppendText(@"c:\temp\new.sql"))
{
    foreach (var line in File.ReadLines(@"c:\temp\old.sql"))
    {
        lineNumber++;

        var updatedLine = line.Replace("('',", "('" + lineNumber.ToString() + "',");

        newFile.WriteLine(updatedLine);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用File.ReadLines枚举行,这样就不会出现大文件的内存异常


Nea*_*eal 5

您可以逐行阅读以下行:

string text = "";
using (StreamReader sr = new StreamReader("C:\\Users\\Donavon\\Desktop\\old.sql"))
{
    int i = 0;
    do
    {
        i++;
        string line = sr.ReadLine();
        if (line != "")
        {
            line = line.Replace("('',", "('" + i + "',");
            text = text + line + Environment.NewLine;
        }
    } while (sr.EndOfStream == false);
}
File.WriteAllText("C:\\Users\\Donavon\\Desktop\\new.sql", text);
Run Code Online (Sandbox Code Playgroud)

  • @TrevorPilley:有数百万种方法可以做到。我可以说你的方式只是另一种方法。考虑到所有未知因素,呼叫“适当”当然是一连串的事情。 (2认同)