Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
448 views
in Technique[技术] by (71.8m points)

c# - Replacing a certain word in a text file

I know this has been asked a few times, but I have seen a lot of regex etc., and I'm sure there is another way to do this with just a stream reader/writer. Below is my code. I'm trying to replace "tea" with the word "cabbage". Can somebody help? I believe I have the wrong syntax.

namespace Week_9_Exer_4
{
    class TextImportEdit
    {
        public void EditorialControl()
        {
            string fileName;
            string lineReadFromFile;


            Console.WriteLine("");
            // Ask for the name of the file to be read
            Console.Write("Which file do you wish to read? ");
            fileName = Console.ReadLine();
            Console.WriteLine("");

            // Open the file for reading
            StreamReader fileReader = new StreamReader("C:\Users\Greg\Desktop\Programming Files\story.txt");

            // Read the lines from the file and display them
            // until a null is returned (indicating end of file)
            lineReadFromFile = fileReader.ReadLine();

            Console.WriteLine("Please enter the word you wish to edit out: ");
            string editWord = Console.ReadLine();            

            while (lineReadFromFile != null)
            {
                Console.WriteLine(lineReadFromFile);
                lineReadFromFile = fileReader.ReadLine();
            }

            String text = File.ReadAllText("C:\Users\Greg\Desktop\Programming Files\story.txt");
            fileReader.Close();

            StreamWriter fileWriter = new StreamWriter("C:\Users\Greg\Desktop\Programming Files\story.txt", false);
            string newText = text.Replace("tea", "cabbage");
            fileWriter.WriteLine(newText);
            fileWriter.Close();

        }
    }
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

If you don't care about memory usage:

string fileName = @"C:UsersGregDesktopProgramming Filesstory.txt";
File.WriteAllText(fileName, File.ReadAllText(fileName).Replace("tea", "cabbage"));

If you have a multi-line file that doesn't randomly split words at the end of the line, you could modify one line at a time in a more memory-friendly way:

// Open a stream for the source file
using (var sourceFile = File.OpenText(fileName))
{
    // Create a temporary file path where we can write modify lines
    string tempFile = Path.Combine(Path.GetDirectoryName(fileName), "story-temp.txt");
    // Open a stream for the temporary file
    using (var tempFileStream = new StreamWriter(tempFile)) 
    {
        string line;
        // read lines while the file has them
        while ((line = sourceFile.ReadLine()) != null) 
        {
            // Do the word replacement
            line = line.Replace("tea", "cabbage");
            // Write the modified line to the new file
            tempFileStream.WriteLine(line);
        }
    }
}
// Replace the original file with the temporary one
File.Replace("story-temp.txt", "story.txt", null);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...