我想知道你是否可以帮助我完成我正在尝试编写的程序。
我正在尝试解析使用撇号的分隔文件,'+'和':'来分隔信息。它是分层的,因此撇号包含一组信息,其中信息由“+”和“:”分隔。
我正在使用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'