我有一个包含多行结构的文本文件:
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();
答案 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
将是您的行的集合,Number
和Data
保存行中的信息。
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个字符作为字符串。使用字符串构建器并添加第一部分,抓住下一部分并添加字符串构建器