在特定点将字符串拆分为多个字符串

本文关键字:字符串 拆分 | 更新日期: 2023-09-27 18:00:57

我有一个文本文件,其中的文本行布局类似

12345MLOL68
12345MLOL68
12345MLOL68

我想读取文件,在第5点、第6点和第9点添加逗号,并将其写入不同的文本文件,这样结果就会是。

12345,M,LOL,68
12345,M,LOL,68
12345,M,LOL,68

这就是我目前拥有的

public static void ToCSV(string fileWRITE, string fileREAD)
{
    int count = 0;
    string x = "";
    StreamWriter commas = new StreamWriter(fileWRITE);
    string FileText = new System.IO.StreamReader(fileREAD).ReadToEnd();
    var dataList = new List<string>();
    IEnumerable<string> splitString = Regex.Split(FileText, "(.{1}.{5})").Where(s => s != String.Empty);
    foreach (string y in splitString)
    {
        dataList.Add(y);
    }

    foreach (string y in dataList)
    {
        x = (x + y + ",");
        count++;
        if (count == 3)
        {
            x = (x + "NULL,NULL,NULL,NULL");
            commas.WriteLine(x);
            x = "";
            count = 0;
        )
    }
    commas.Close();
}

我遇到的问题是试图弄清楚如何在几个点上分割我读入的原始字符串行。线路

IEnumerable<string> splitString = Regex.Split(FileText, "(.{1}.{5})").Where(s => s != String.Empty);

没有按我想要的方式工作。它只是将1和5相加,并在第6个字符处拆分所有字符串。

有人能帮我在特定的点上拆分每条字符串吗?

在特定点将字符串拆分为多个字符串

更简单的代码:

public static void ToCSV(string fileWRITE, string fileREAD)
{
    string[] lines = File.ReadAllLines(fileREAD);
    string[] splitLines = lines.Select(s => Regex.Replace(s, "(.{5})(.)(.{3})(.*)", "$1,$2,$3,$4")).ToArray();
    File.WriteAllLines(fileWRITE, splitLines);
}

只需像这样按降序在正确的位置插入即可。

string str = "12345MLOL68";
int[] indices = {5, 6, 9};
indices = indices.OrderByDescending(x => x).ToArray();
foreach (var index in indices)
{
    str = str.Insert(index, ",");
}

我们这样做是按降序进行的,因为如果我们用其他方式改变指数,就很难跟踪它

这是演示

为什么不使用子字符串,例如

 editedstring=input.substring(0,5)+","+input.substring(5,1)+","+input.substring(6,3)+","+input.substring(9);

这应该适合你的需要。