【问题标题】:split string in to several strings at specific points在特定点将字符串拆分为多个字符串
【发布时间】:2014-04-30 05:39:49
【问题描述】:

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

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

谁能帮我在特定点拆分每个字符串?

【问题讨论】:

    标签: c# regex string split


    【解决方案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);
    }
    

    【讨论】:

      【解决方案2】:

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

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

      我们按降序执行此操作,因为如果我们以其他方式更改索引,将很难跟踪它。

      这里是Demo

      【讨论】:

        【解决方案3】:

        你为什么不使用 substring ,例子

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

        这应该适合你的需要。

        【讨论】:

        • 除了需要对子字符串进行大写并尝试使用 +(,) 而不是 +"," 之外,它很容易并且效果很好。谢谢。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-21
        相关资源
        最近更新 更多