在c#的文本文件中插入一个运行数
本文关键字:一个 运行 插入 文本 文件 | 更新日期: 2023-09-27 18:05:11
我想在一个文本文件内添加一个运行数字,但它必须在特定的列。等:第1行,第15列
原始文件:包含数据名称,职业,出生日期,状态
john teacher 1988 married
marcel engineer1976 single
emi professo1975 married
转换文件:在出生日期和状态之间插入运行号
john teacher 1988 D001married
marcel engineer1976 D002single
emi professo1975 D003married
注意:每个数据都从它们自己的特定列开始。姓名从第1列开始,职业从第7列开始,生日从第15列开始,地位从第20列开始。
遍历文本的每一行,并在每行上运行如下代码:
const int STATUS_START_COLUMN_NUM = 19;
line = line.Substring(0,STATUS_START_COLUMN_NUM - 1) + "D" + String.Format("{0:000}",i) + line.Substring(STATUS_START_COLUMN_NUM);
i++;
这正是String.Insert()
的作用。
List<string> data = new List<string>
{
"john teacher 1988 married",
"marcel engineer1976 single",
"emi professo1975 married"
};
Console.WriteLine("Before: ");
data.ForEach(Console.WriteLine);
Console.WriteLine();
int runningNumber = 1;
for (int i = 0; i < data.Count; i++)
{
data[i] = data[i].Insert(20, String.Format("D{0:000}", runningNumber));
runningNumber++;
}
Console.WriteLine("After: ");
data.ForEach(Console.WriteLine);
结果:
Before:
john teacher 1988 married
marcel engineer1976 single
emi professo1975 married
After:
john teacher 1988 D001married
marcel engineer1976 D002single
emi professo1975 D003married
下面是一个使用StringBuilder
和TextWriter
的示例解决方案,使用string.Format()
和Truncate
的附加功能来获得适当的字符串长度。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace ConsoleApplicationStringBuilder
{
class Program
{
static void Main(string[] args)
{
/*
john teacher 1988 married
marcel engineer1976 single
emi professo1975 married
*/
StringBuilder sb = new StringBuilder();
sb.AppendLine(string.Format("{0, -7}{1, -8}{2, -5}{3}", Truncate("john", 6), Truncate("teacher", 8), 1988, Truncate("married", 7)));
sb.AppendLine(string.Format("{0, -7}{1, -8}{2, -5}{3}", Truncate("marcel", 6), Truncate("engineer", 8), 1976, Truncate("single", 7)));
sb.AppendLine(string.Format("{0, -7}{1, -8}{2, -5}{3}", Truncate("emi", 6), Truncate("professor", 8), 1975, Truncate("married", 7)));
string s = sb.ToString();
Console.WriteLine(s);
//Write to file
using (TextWriter tw = File.CreateText("C:''test.txt"))
{
tw.Write(s);
tw.Flush();
tw.Close();
}
Console.WriteLine("File written to C:''test.txt"); ;
Console.ReadLine();
}
static public string Truncate(string value, int max)
{
return value.Substring(0, Math.Min(value.Length, max));
}
}
}
这里发生的事情如下:
- 截断
Truncate
函数传递的每个字符串,只获得给定最大值内的字符串 - 将每个值传递给
string.Format()
,用所需的空格填充每个项 - 通过
StringBuilder
构建所有字符串并将其转换为string
- 创建一个文本文件,赋值
TextWriter
,用之前构建的string
填充。