在多行中拆分特定行位置的多行文本

时间:2014-07-21 17:30:40

标签: c# visual-c#-express-2010

我有一个包含多行结构的文本文件:

12345 beautiful text in line01
95469 other text in line02
16987 nice text in line03
(etc...)

并想要这个:

12345
beautiful text in line01
95469
other text in line02
16987
nice text in line03

因此,对于每一行,在第5位,我需要一个新的文本字符串行。

尝试使用\n插入string.Remove().Insert(),但仅适用于第一行。 我怎么能这样做?

EDIT 代码按要求添加 在input.txt中有多行文本文件。

        StreamReader myReader = new StreamReader("input.txt");
        string myString00 = myReader.ReadLine();

        string myStringFinal = myString00;
        myStringFinal = myStringFinal.Remove(5, 1).Insert(5, "\n");

        myReader.Close();
        FileStream myFs = new FileStream("output.txt", FileMode.Create);
        // First, save the standard output.
        TextWriter tmp = Console.Out;
        StreamWriter mySw = new StreamWriter(myFs);
        Console.SetOut(mySw);
        Console.WriteLine(myStringFinal);
        Console.SetOut(tmp);
        Console.WriteLine(myStringFinal);
        mySw.Close();
        Console.ReadLine();

3 个答案:

答案 0 :(得分:3)

您可以尝试使用Regex

var subject = @"12345 beautiful text in line01
95469 other text in line02
16987 nice text in line03";
var expected = Regex.Replace(subject,@"(\d{5})\s?","$1\r\n");

基本上,这会找到5个数字,后跟一个空格(可选),如果找到则用数字和新行替换它。而且你已经完成了。

答案 1 :(得分:0)

仅当数字正好为5个字符时才会起作用。

string input = @"12345 beautiful text in line01
95469 other text in line02
16987 nice text in line03";

var lines = input.Split(new[] { Environment.NewLine }, StringSplitOptions.None);

var formattedLines = lines
    .Select(x => new
    {
        Number = int.Parse(x.Substring(0, 5)),
        Data = x.Substring(5).TrimStart()
    })
    .ToList();

formattedLines将是您的行的集合,NumberData保存行中的信息。

var firstLinesData = formattedLines[0].Data;

现在,要制作输出格式:

StringBuilder builder = new StringBuilder();

foreach (var item in formattedLines)
{
    builder.AppendLine(item.Number.ToString());
    builder.AppendLine(item.Data);
}

string output = builder.ToString();

答案 2 :(得分:0)

遍历每一行。使用substring(http://msdn.microsoft.com/en-us/library/aka44szs(v=vs.110).aspx)将前5个字符作为字符串。使用字符串构建器并添加第一部分,抓住下一部分并添加字符串构建器