【问题标题】:C# How to delete the first line of my text files?C#如何删除我的文本文件的第一行?
【发布时间】:2011-12-18 18:57:11
【问题描述】:

我想在 Visual Studio 中创建一个 Windows 窗体应用程序,该应用程序在单击按钮时写入文本文件。

我有一个 txt 文件(例如 test.txt),其中包含

AAAA
BBBB
CCCC
DDDD
EOS
FFFF
GGGG
HHHH
IIII
EOS
JJJJ
KKKK
LLLL
MMMM
NNNN
EOS
EOF

然后我想把它拆分成多个其他的txt文件

**bag1.txt**
AAAA
BBBB
CCCC
DDDD
EOS

**bag2.txt**
EEEE
FFFF
GGGG
IIII
EOS

**bag3.txt**
JJJJ
KKKK
LLLL
MMMM
NNNN
EOS
EOF

这是代码,

private void read3btn_Click(object sender, EventArgs e)
    {
        string fileName = textBox1.Text;
        TextReader sr = new StreamReader(fileName);
          //This allows you to do one Read operation.

        string s = sr.ReadToEnd();;
        sr.Close();

        string[] bags = s.Split(new string[] {"EOS"}, StringSplitOptions.None);

        // This will give you an array of strings (minus the EOS field)
        // Then write the files...

        System.IO.File.WriteAllText(@"D:\Program-program\tesfile\bag1.txt", bags[0] + "EOS");  //< -- Add this you need the EOS at the end field the field

        System.IO.File.WriteAllText(@"D:\Program-program\tesfile\bag2.txt", bags[1] + "EOS");

        System.IO.File.WriteAllText(@"D:\Program-program\tesfile\bag3.txt", bags[2] + "EOS" + bags[3]);

   }}

那么输出就是这样来的

**bag1.txt**
    AAAA
    BBBB
    CCCC
    DDDD
    EOS

**bag2.txt**

EEEE
FFFF
GGGG
IIII
EOS

**bag3.txt**

JJJJ
KKKK
LLLL
MMMM
NNNN
EOS
EOF

不幸的是bags[1]和bags[2]中的输出在第一行有一个空行,有没有更新代码?

【问题讨论】:

    标签: c# text-files streamreader writer


    【解决方案1】:

    您的"EOS" 分隔符不包含换行符。试试:

    string[] bags = s.Split(new string[] {"EOS\n"}, StringSplitOptions.None);
    

    你的输入文件是

    ...DDDD\nEOS\nEEEE\n...
    

    与您的代码拆分后,您会得到:

    ...DDDD\n  EOS  \nEEEE\n...
    

    注意EEEE 之前的前导\n。通过在分隔符中包含\n,您将获得:

    ...DDDD\n  EOS\n  EEEE\n...
    

    【讨论】:

    • 除非换行符是\r\r\n
    • 我想可能是这样。我将把它留给 OP 来确定他的特定输入文本文件。
    • 它在窃听,据说索引超出了数组的范围。 :(
    • 啊,是的,非常感谢 Greg,我在调试后终于明白了:D
    【解决方案2】:

    调用.Trim() 删除前导空格。

    【讨论】:

    • 嗨 slaks 我应该把它放在哪里?
    • 在要修剪的字符串上。
    • 嗯,是的,我已经试过了,但是它会在 EOS 上剪掉最后一行,所以输出变成了没有换行符的 IIIIEOS :(
    【解决方案3】:

    好的,这不是什么大问题 :) 当你阅读你的文件时,你会得到一个字符串,如 "AAA\nBBB\nCCC\nDDD\nEOS\nEEE\nFFF\n...EOS\nJJJ\n..." 如果你只在“EOS”上修剪字符串,你会得到这个:

    "AAA\nBBB\nCCC\nDDD\n" "\nEEE\nFFF\n..." "\nJJJ..."

    因为 Split() 方法删除了“EOS”字符串,但没有删除它后面的新行:)

    string[] bags = s.Split(new string[] {"EOS\n"}, StringSplitOptions.None);
    

    ..这应该可以正常工作:)

    【讨论】:

      猜你喜欢
      • 2013-12-20
      • 1970-01-01
      • 2018-02-07
      • 2021-06-20
      • 2011-02-08
      • 2010-09-25
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      相关资源
      最近更新 更多