设置对象数组中每个项目的属性(C#,Regex.Split())

时间:2018-07-07 22:12:09

标签: c# arrays regex object split

我正在尝试使用Regex.Split方法将对象数组中每个项目的属性设置为split方法的结果。考虑以下带有getter和setter的类:

public class PuffAndStuff
    {
        private String puff = "";
        public string puff { get => puff; set => puff = value; }
    }

问题是,我想使用Regex.Split方法将文本分离到文本文件中。考虑以下程序:

static void Main()
        {
            Regex regex = new Regex(@"Puff[0-9]\r\n");

            PuffAndStuff[] subPuff = new PuffAndStuff[] { new PuffAndStuff { puff = "" } };


            StreamReader reader = File.OpenText("D:\\SampleText.txt");

            string check = reader.ReadToEnd();

            string[] arrayCheck = Regex.Split(check, @"Puff[0-9]\r\n");

            subPuff = Regex.Split(check, @"Puff[0-9]\r\n");

            subPuff[0].puff = arrayCheck[1] + arrayCheck[2];

            Console.WriteLine("Segment 1:\r\n" + subPuff[0].puff);


            Console.WriteLine("Segment 2:\r\n" + arrayCheck[3] + arrayCheck[4]);


        }

这种想法使我不禁思索,以另一种方式(使用通用动态列表而不是对象数组)将文本与文件分开可能会更好,但我也在尝试以最快的方式思考为此(将对象列表/字典/数组设为“可能”为静态)。不过,也许这不是解决问题的实用方法。我的一个问题是subPuff对象数组将不接受Regex.Split()字符串。有人对我如何使这项工作或如何使它变得更好有任何建议吗?

1 个答案:

答案 0 :(得分:1)

正则表达式为我工作。检查您的文本文件中是否有隐藏字符,例如行尾是否有空格。不确定确切要做什么,但是我摆脱了其中一个数组,因为您使用一个元素定义了它,然后尝试推入.Split的结果。它不会自行调整大小,但会调整列表大小。您还尝试将字符串放入PuffAndStuff对象。那行不通。无论如何,也许我的代码中的某些内容会有所帮助。

请记住遇到问题的程序员,因为他必须操纵一些文本。他以为“我将使用正则表达式!”然后他有两个问题。 :-)

public class PuffAndStuff
        {
            private String puff = "";
            //Naming viloation - changed puff to Puff
            public string Puff { get => puff; set => Puff = value; }
        }

 private void OPCode()
        {
            StreamReader reader = File.OpenText(@"D:\\SampleText.txt");
            string check = reader.ReadToEnd();
            List<PuffAndStuff> lstPuff = new List<PuffAndStuff>();
            string[] arrayCheck = Regex.Split(check, @"Puff[0-9]\r\n");
            foreach(string s in arrayCheck)
            {
                lstPuff.Add(new PuffAndStuff { Puff = s });
            }
            lstPuff[0].Puff = arrayCheck[1] + arrayCheck[2];
            Console.WriteLine("Segment 1:\r\n" + lstPuff[0].Puff);
            Console.WriteLine("Segment 2:\r\n" + arrayCheck[3] + arrayCheck[4]);
        }