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

Insert a running number in textfile in c#

我想在文本文件中添加一个 运行 数字,但它必须在特定的列中。等:第 1 行,第 15 列。

原始文件:它有数据名称、职业、出生日期、状态

john   teacher 1988 married
marcel engineer1976 single
emi    professo1975 married

在生日和状态之间转换file:insert运行数字

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++;

这是一个示例解决方案,它利用 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 填充它

这正是 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