【问题标题】:Set Property of Each Item In Object Array (C#, Regex.Split())设置对象数组中每个项目的属性(C#,Regex.Split())
【发布时间】:2018-12-16 01:26:37
【问题描述】:

我正在尝试使用 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() 字符串。有没有人对我如何使这项工作或如何使这项工作变得更好有任何建议?

【问题讨论】:

  • 尚不清楚您要在这里实现什么。无论您目前拥有何种解决方案,您能否与我们分享您最终要寻找的东西?
  • 我要做的是将文件分成不同的段并将它们存储为对象。我想这样做,以便可以检查每个对象是否缺少文本或数据。假设这是我即将进行的项目的一部分。我希望能够制作一个缺少不同段的对象列表,这样就不必滚动文本文件来查看缺少的内容

标签: c# arrays regex object split


【解决方案1】:

正则表达式对我有用。检查您的文本文件中是否存在隐藏字符,例如行尾的空格。不确定你到底在追求什么,但我去掉了其中一个数组,因为你用一个元素定义了它,然后试图推入 .Split 的结果。它不会自行调整大小,但 List 会。您还尝试将字符串放入 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]);
        }

【讨论】:

  • 我担心您会引入类似 for 的循环作为解决方案 - 希望只是拆分。但是,嘿,我们不能拥有这一切,对吧?我也想过将其更改为列表-我只是在您发布答案之前就这样做了,对此我深表感谢。万分感谢! :)
猜你喜欢
  • 2016-10-27
  • 1970-01-01
  • 2011-12-03
  • 2013-10-03
  • 2016-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多