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

时间:2014-04-30 05:39:49

标签: c# regex string split

我有一个文本文件,其中的文字行如此布局

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个字符处分割所有字符串。

有人可以帮助我在特定点分割每个字符串吗?

3 个答案:

答案 0 :(得分:1)

只需按照这样的降序插入正确的位置。

string str = "12345MLOL68";
int[] indices = {5, 6, 9};

indices = indices.OrderByDescending(x => x).ToArray();

foreach (var index in indices)
{
    str = str.Insert(index, ",");
}

我们按降序执行此操作,因为如果我们采用其他方式索引会发生变化,则很难跟踪它。

以下是Demo

答案 1 :(得分:1)

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

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

这应该符合您的需要。

答案 2 :(得分:1)

更简单的代码:

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);
}