在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列开始。

在c#的文本文件中插入一个运行数

遍历文本的每一行,并在每行上运行如下代码:

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

下面是一个使用StringBuilderTextWriter的示例解决方案,使用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填充。