如何在C#中读取和编辑.txt文件?

如何在C#中读取和编辑.txt文件?,c#,file,text-files,C#,File,Text Files,例如,我有一个txt文件,内容如下: 12 345 45 2342 234 45 2 2 45345 234 546 34 3 45 65 765 12 23 434 34 56 76 5 我想在所有数字之间插入一个逗号,在每行的开头加一个左大括号,在每行的结尾加一个右大括号。因此,在编辑之后,它应该是: {12, 345, 45} {2342, 234, 45, 2, 2, 45345} {234, 546, 34, 3, 45, 65, 765} {12, 23, 434, 34, 56,

例如,我有一个txt文件,内容如下:

12 345 45
2342 234 45 2 2 45345
234 546 34 3 45 65 765
12 23 434 34 56 76 5
我想在所有数字之间插入一个逗号,在每行的开头加一个左大括号,在每行的结尾加一个右大括号。因此,在编辑之后,它应该是:

{12, 345, 45}
{2342, 234, 45, 2, 2, 45345}
{234, 546, 34, 3, 45, 65, 765}
{12, 23, 434, 34, 56, 76, 5}
如何操作?

您需要使用类打开文件,使用
StreamReader
类从文件中读取,使用
StreamWriter
类回写文件

您可以像这样创建
FileStream

FileStream file = new FileStream("FileName", FileMode.Open, FileAccess.ReadWrite);
然后将
文件流
包装在
流阅读器
中:

StreamReader reader = new StreamReader(file);
然后,读入每一行并进行字符串处理(添加逗号和括号):

最后,将
FileStream
包装在
StreamWriter
中,并将修改后的字符串写回文件:

StreamWriter writer = new StreamWriter(file);

// Write your content here
writer.Write("my content");
使用流后不要忘记关闭流

reader.Close();
writer.Close();
file.Close();
读每一行

在字符串之前和之后添加一个括号


然后将空格“”替换为“,”(逗号和空格)

您应该首先处理逻辑,而不是直接要求别人为您提供逻辑。至于读/写文件,您可以这样做:

//write      
FileStream fs = new FileStream("file_name", FileMode.Create);
StreamWriter w = new StreamWriter(fs, Encoding.UTF8);
w.WriteLine("text_to_write");
w.Flush();
w.Close();
fs.Close();

//read
fs = new FileStream("file_name", FileMode.Open);
StreamReader r = new StreamReader(fs, Encoding.UTF8);
Console.WriteLine(r.ReadLine());
r.Close();
fs.Close();
  • 加载整个文件
  • 使用string.split('\n')将内容分成几行
  • 使用string.replace(“”,’)插入逗号
  • 保存文件
  • 或者,正如waqasahmed所说,一次只做一件

    另见:

    而且,这听起来像是家庭作业问题。也许我们应该有一个“家庭作业”标签?

    类似这样的东西:(未测试)


    编辑以添加如何修改sLine。(未经测试,但我确信它会正常工作)


    最后,我使用了第二个文件,而不是编辑第一个文件:

    TextReader reader = new StreamReader("triangle.txt");
    TextWriter writer = new StreamWriter("triangle2.txt");
    for (; ; )
    {
        string s = reader.ReadLine();
        if (s == null)
           break;
        s = s.Replace(" ", ", ");
        s = "{" + s + "},";
        writer.WriteLine(s);
    }
    

    添加了一些LINQ以获得乐趣和利润(优化空间;):


    您应该使用using语句来确保对象(FileStreams、StreamReaders和streamwriter)被正确处理。您应该使用while循环,而不是一个带中断的无限for循环,如下所示:while(reader.Peek()>-1)我会避免无限for(;;)循环;这似乎是一种糟糕的样式。您可以将其简化为“while”((s=reader.Readline())!=null){……}全部在一条语句中!无敌:-我有一个问题。当我打开同一个文件时,我必须将所有数据写回,而不仅仅是编辑的数据
    string filename = @"c:\yourfilename.txt";
    StringBuilder result = new StringBuilder();
    
                if (System.IO.File.Exists(filename))
                {
                    using (StreamReader streamReader = new StreamReader(filename))
                    {
                        String line;
                        while ((line = streamReader.ReadLine()) != null)
                        {
                            string newLine = String.Concat("{", line, "}", Environment.NewLine);
                            newLine = newLine.Replace(" ", ", ");
                            result.Append(newLine);
                        }
                    }
                }
    
    using (FileStream fileStream = new FileStream(filename , fileMode, fileAccess))
                {
                    StreamWriter streamWriter = new StreamWriter(fileStream);
                    streamWriter.Write(result);
                    streamWriter.Close();
                    fileStream.Close();
                }
    
        StreamReader sr = new StreamReader("path/to/file.txt");
        StreamWriter sw = new StreamWriter("path/to/outfile.txt");
        string sLine = sr.ReadLine();
        for (; sLine != null; sLine = sr.ReadLine() )
        {
            sLine = "{" + sLine.Replace(" ", ", ") + "}";
            sw.WriteLine(sLine);
        }
    
    TextReader reader = new StreamReader("triangle.txt");
    TextWriter writer = new StreamWriter("triangle2.txt");
    for (; ; )
    {
        string s = reader.ReadLine();
        if (s == null)
           break;
        s = s.Replace(" ", ", ");
        s = "{" + s + "},";
        writer.WriteLine(s);
    }
    
    string [] lines = File.ReadAllLines("input.txt");
    var processed = lines.Select(line => string.Format("{{{0}}}", line.Replace(" ", ", ")));
    File.WriteAllLines("output.txt",processed.ToArray());
    
    System.IO.File.WriteAllLines(
        "outfilename.txt",
        System.IO.File.ReadAllLines("infilename.txt").Select(line =>
            "{" +
            string.Join(", ",
                line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries)
            ) + "}"
        ).ToArray()
    );