分隔字符串并动态创建对象

时间:2017-07-17 14:24:10

标签: c# string object dynamic

我想知道你是否可以帮助我完成我正在尝试编写的程序。

我正在尝试解析使用撇号的分隔文件,'+'和':'来分隔信息。它是分层的,因此撇号包含一组信息,其中信息由“+”和“:”分隔。

我正在使用Split和Substring解析文本,使用foreach循环通过字符串数组进行解析,以便分解信息。我创建了一个类,对象将被实例化并保存在列表中,以便包含以后反刍或写入文件的信息。

我坚持的事情是能够根据我解析的信息迭代地创建对象。我希望能够创建一个对象,然后根据我解析的字符串的哪一部分更改类的属性。

最好有条件地创建对象和动态更改属性的方法是什么?我是否只是使用一个案例/开关来分解信息并对更新进行硬编码?似乎应该有比这更好的方法。

我还想知道是否应该让EMessage类进行解析字符串等工作,或者只是将其用作信息容器?这是一个偏好问题吗?

非常感谢。

这是主要部分。

static void Main(string[] args)
    {
        try
        {
            char[] segmentDelimiter = { '\'' };
            char[] elementDelimiter = { '=' };
            char[] subElementDelimiter = { '+' };
            char[] subElementFieldDelimiter = { ':' };
            string segmentDescription;
            List<EMessage> eMessages = new List<EMessage>();



            using (StreamReader sr = new StreamReader("c:\\temp\\File.dat"))
            {
                string text = sr.ReadToEnd();
                string[] Segments = text.Split(segmentDelimiter);
                Console.WriteLine("{0} segments found \r\n", Segments.Length);
                EMessage eMessage = new EMessage();

                    foreach (string s in Segments)      // delimiting the Segments
                    {
                        string switchSegment = s.Substring(0, 3);
                        switch (switchSegment)
                        {
                            case "PLH":
                                //ediMessage.
                                Console.WriteLine("We've found the Header");
                                string[] Elements = s.Substring(4).Split(subElementDelimiter);
                                foreach (string e in Elements)
                                {
                                    Console.WriteLine("E is: " + e);

                                }
                                break;
                            case "MHD":
                                Console.WriteLine("We've found MHD");
                                Console.WriteLine("The rest of the string is: " + s.Substring(4));
                                break;
                        }

                    }
                Console.ReadKey();
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("Didn't work.");
            Console.WriteLine(e.Message);
            Console.ReadKey();
        }

    }
}

这是我尝试创建和填充的课程:

public class EDIMessage
{
    public int polNumber { get; set; }
    public Header Header { get; set; }
    public PaymentDetails paymentDetails { get; set; }
    public Location Location { get; set; }
    public Vehicle vehicle { get; set; }




    public EMessage()
    {
        Console.WriteLine("New EMessage Object Created");
        Header = new Header();
        paymentDetails = new PaymentDetails();
        policyLocation = new PolLocation();
        vehicle = new Vehicle();

    }

}

public class Header
{
    public DateTime effStartDateTime {get; set;}
    public DateTime effEndDateTime {get; set;}
}

public class PaymentDetails
{
    public double Premium {get; set;}
}

public class Location
{
    public string AddressLine1 {get; set;}
    public string AddressLine2 {get; set;}
    public string AddressLine3 {get; set;}
    public string AddressLine4 {get; set;}
    public string AddressLine5 {get; set;}
    public string AddressLine6 {get; set;}
    public string PostCode {get; set;}
}

public class Vehicle
{
    public DateTime DateFirst {get; set;}
    public string vehicleCode { get; set; }
}

数据在这里:

HED=1+CODE01:1'
BIB=A12345:1
+:England'
DAT=01:AN1:JAN01:01012001:01012001'
SHV=1'
FRD=12345678
+ANA:01:PPV:03
+HY
+01012017:150000
+31122017:120000
+2001-2001
+JANUARY 2000
+
+PCT
+.'

VEH=01012000
+123456:MAKE MODEL VEHICLE
+A
+B
+C
+01
+02
+
+01234
+0
+56789
+ELECTRIC
+
+
+1
+1'

0 个答案:

没有答案