public TprResult(string t) { t = egString.trim(t.Trim(), '>'); m_txt = t; try { m_succeed = true; m_office = egString.Between2String(t, "OFFICE :", "IATA NUMBER :"); m_iata_number = egString.Between2String(t, "IATA NUMBER :", "DEVICE :"); m_device = Convert.ToInt32(egString.Between2String(t, "DEVICE :", "/")); m_date = BaseFunc.str2datetime(egString.Between2String(t, "DATE :", "AIRLINE:"), false); m_ticket_total = Convert.ToInt32(egString.Between2String(t, "TOTAL TICKETS:", "(")); m_ticket_void = Convert.ToInt32(egString.Between2String(t, "TICKETS VOID", "TICKETS REFUND")); m_ticket_refund = Convert.ToInt32(egString.Between2String(t, "TICKETS REFUND", ")")); m_fare_normal = float.Parse(egString.Between2String(t, "NORMAL FARE -- AMOUNT :", "CNY")); m_carriers = float.Parse(egString.Between2String(t, "CARRIERS -- AMOUNT :", "CNY")); m_tax_normal = float.Parse(egString.Between2String(t, "NORMAL TAX -- AMOUNT :", "CNY")); m_commit_normal = float.Parse(egString.Between2String(t, "NORMAL COMMIT -- AMOUNT :", "CNY")); m_refund_net = float.Parse(egString.Between2String(t, "NET REFUND -- AMOUNT :", "CNY")); m_deduction = float.Parse(egString.Between2String(t, "DEDUCTION -- AMOUNT :", "CNY")); m_tax_refund = float.Parse(egString.Between2String(t, "REFUND TAX -- AMOUNT :", "CNY")); m_commit_refund = float.Parse(egString.Between2String(t, "REFUND COMMIT -- AMOUNT :", "CNY")); if (TicketNumbers() != m_ticket_total) { throw new Exception(""); } } catch { m_succeed = false; } }
/// <summary> /// 01234567890123456789012345678901234567890123456789 /// 8C8276 X TU23DEC08XMNWUH RR19 1020 1130 E --T2 /// MU5901 G WE24DEC KMGJHG RR6 1825 1915 E /// ZH9706 Y TU06JAN09XFNSZXUN1 2215 2355 ES ///*MU6737 H1 FR13FEB CTUPVGNO6 1340 1605 E --T1 OP-MU5408 /// </summary> /// <param name="seg"></param> public void FromString2(string seg) { string[] a = seg.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); List <string> ls = new List <string>(); for (int i = 0; i < a.Length; ++i) { if (a[i] != "") { ls.Add(a[i]); } } Flight = ls[0]; Bunk = ls[1][0]; try { if (ls[2].Length > 7)//上面一种 { Time = Convert.ToInt32(ls[4]); //Time2 = Convert.ToInt32(ls[5]); Time2 = Convert.ToInt32(ls[5].Substring(0, 4));//modified by king Date = BaseFunc.str2datetime(ls[2].Substring(0, 9), true); Citypair = ls[2].Substring(9, 6); Actioncode = ls[3].Substring(0, 2); Number = Convert.ToInt32(ls[3].Substring(2)); } else//下面一种 { Date = BaseFunc.str2datetime(ls[2], true); if (ls[3].Length == 6) { Time = Convert.ToInt32(ls[5]); //Time2 = Convert.ToInt32(ls[6]); Time2 = Convert.ToInt32(ls[6].Substring(0, 4));//modified by king 如果飞机抵达时间是次日凌晨,表示如:0040+1,将转换出错 Citypair = ls[3]; Actioncode = ls[4].Substring(0, 2); Number = Convert.ToInt32(ls[4].Substring(2)); } else if (ls[3].Length > 6) { Time = Convert.ToInt32(ls[4]); //Time2 = Convert.ToInt32(ls[5]); Time2 = Convert.ToInt32(ls[5].Substring(0, 4));//modified by king Citypair = ls[3].Substring(0, 6); Actioncode = ls[3].Substring(6, 2); Number = Convert.ToInt32(ls[3].Substring(8)); } } } catch { //重要的是航班号和舱位,其它信息可以忽略 } }
/// <summary> /// 一次性封口可用IBE直接调用,其中ssr指令直接加证件号,顺序和姓名顺序相同 /// </summary> /// <param name="ss">ss:mu2501/l/22apr/wuhpvg/ll1\rnm1ce\rct123\tktl2300/./wuh128\rssr 123456\r@</param> private void Init(string ss) { string[] a = ss.ToLower().Split('\r'); string s = a[0].Trim(); for (int i = 1; i < a.Length; i++) { s = a[i].Trim(); if (s.StartsWith("ss") && !s.StartsWith("ssr")) { s = egString.trim(s.Substring(2), "/: "); string[] b = s.Split('/'); m_flightno.Add(b[0]); m_bunk.Add(b[1]); m_date.Add(BaseFunc.str2datetime(b[2], true)); m_citypair.Add(b[3]); } else if (s.StartsWith("nm")) { s = egString.trim(s.Substring(2), "/: "); string[] nm = s.Split('1'); for (int j = 0; j < nm.Length; j++) { m_names.Add(nm[j]); } } else if (s.StartsWith("c")) { s = egString.trim(s.Substring(1), "/: t"); m_ct = s; } else if (s.StartsWith("tktl")) { s = egString.trim(s.Substring(4), "/: "); string[] c = s.Split('/'); m_tkt = BaseFunc.str2datetime(c[1], true).AddHours(int.Parse(c[0]) / 100).AddMinutes(int.Parse(c[0]) % 100); } else if (s.StartsWith("ssr")) { s = egString.trim(s.Substring(4), "/: "); m_cards.Add(s); } } if (m_names.Count != m_cards.Count && m_cards.Count != 0) { throw new Exception("姓名数与证件数不一致!"); } else if (m_cards.Count == 0) { for (int i = 0; i < m_names.Count; i++) { m_cards.Add(i.ToString()); } } }
/// <summary> /// 取(SSR ADTK 1E BY WUH23DEC08/0823 OR CXL MU5901 G24DEC) /// </summary> private void ssradtkfromlines(string [] line) { try { List <string> ls = getsomeline(line, "SSR ADTK"); m_city_dz = ls[0].Substring(15, 3); string d = ls[0].Substring(18, 7); string t = ls[0].Substring(26, 4); m_time_dz = BaseFunc.str2datetime(d, false); int h = int.Parse(t.Substring(0, 2)); int m = int.Parse(t.Substring(2)); m_time_dz = m_time_dz.AddHours(h).AddMinutes(m); } catch (Exception ex) { } }
/// <summary> /// 从串中初始化结构体变量 /// </summary> /// <param name="seg">(生成PNR后的串)如:"MU2501 I MO22DEC WUHPVG DK1 0830 0945",必须Trim</param> public void FromString(string seg) { string[] a = seg.Split(' '); List <string> ls = new List <string>(); for (int i = 0; i < a.Length; ++i) { if (a[i] != "") { ls.Add(a[i]); } } Flight = ls[0]; Bunk = ls[1][0]; Date = BaseFunc.str2datetime(ls[2], true); Citypair = ls[3]; Actioncode = ls[4].Substring(0, 2); Number = Convert.ToInt32(ls[4].Substring(2)); Time = Convert.ToInt32(ls[5]); Time2 = Convert.ToInt32(ls[6]); }
/// <summary> /// 1TAO CZ OPEN X OPEN Y40 19DEC8/19DEC9 20K REFUNDED /// RL: /// WUH /// /// /// 1YIH HU 7110 Y 25DEC 1700 OK Y 20K USED/FLOWN /// 1WUH 8L 9936 N 24DEC 1330 OK Y30 20K OPEN FOR USE /// RL:BHP2C /P04EZ 1E /// O KMG /// /// /// 1ZUH CZ 6438 L 22DEC 1340 OK Y60 22DEC8/22DEC9 20K STATUS = B /// RL:V88KC /BRMR3 CA /// WUH /// </summary> /// <param name="m"></param> public void FromString(string m) { FROM = m.Substring(1, 3); AIRLINE = m.Substring(5, 2); NUMBER = m.Substring(11, 4).Trim(); BUNK = m.Substring(17)[0]; try { string dtstring = m.Substring(19, 5).Trim(); if (dtstring != "OPEN") { DATE = BaseFunc.str2datetime(m.Substring(19, 5), true); } } catch { } try { TIME = Convert.ToInt32(m.Substring(25, 4)); } catch { } ACTIONCODE = m.Substring(30, 2); TKTCLASS = m.Substring(33, 3).Trim(); string t = m.Substring(37, 21).Trim();//string t = m.Substring(36, 21).Trim();//2009.12.08发现bug:m值变成“5 30JAN0/30JAN0”,前面多截取了一个数字 by king string[] a = t.Split('/'); if (a.Length == 2) { //发现一个票号提取后得字符串:1TNA SC 1187 E 19NOV 1110 OK E/TNA11N94 19NOV1/19NOV1 20K OPEN FOR USE //导致上面的变量 t 取值不正确 //考虑到以下仅为行程单的【EagleString\DetrResult.cs/SetControlsByDetrResult/ToTextBoxArrayLikeReceipt】方法服务,故注释掉以防出错 by king //DATE_YES = BaseFunc.str2datetime(a[0], false); //DATE_NO = BaseFunc.str2datetime(a[1], true); } WEIGHT = m.Substring(58, 3); a = m.Split(Structs.SP_R_N, StringSplitOptions.RemoveEmptyEntries); STATE = a[0].Substring(62); try { string codes = egString.Between2String(m, "RL:", "\n"); string[] b = codes.Split('/'); string code1 = b[0].Trim(); string code2 = b[1].Trim(); string CA = ""; if (code2.Length > 5) { CA = egString.substring(b[1], b[1].Length - 2, 2); } if (CA == "CA") { PNR = code1; PNRBIG = code2; } else if (CA == "1E") { PNR = code2; PNRBIG = code1; } else { PNR = PNRBIG = code1; } } catch { PNR = PNRBIG = ""; } if (PNR.Length > 5) { PNR = PNR.Substring(0, 5); } if (PNRBIG.Length > 5) { PNRBIG = PNRBIG.Substring(0, 5); } TO = a[a.Length - 1].Substring(1).Trim(); }
/// <summary> /// av H型 /// </summary> public void AvResult1(string avres, int price, int distance) { try { m_price = price; m_distance = distance; IsAvReturnString = true; string[] sp = new string[16];//分割符为"\ni" for (int i = 0; i < 8; ++i) { int itemp = i + 1; sp[i] = "\n" + itemp.ToString(); sp[i + 8] = "\r\n" + itemp.ToString(); } //Modify by wangfb 20060630 //CZ FARE HGHPEK/PEKHGH YI:CZ/TZ304 //AIRPORT CHARGE FOR LATERAL FLIGHT string[] lastlines = avres.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); if (lastlines[lastlines.Length - 1].IndexOf("FARE") >= 0 || lastlines[lastlines.Length - 1].IndexOf("AIRPORT") >= 0) { avres = avres.Replace(lastlines[lastlines.Length - 1], ""); } string[] avSeg = avres.Split(sp, StringSplitOptions.RemoveEmptyEntries); nSegs = avSeg.Length - 1; //"27JUL(THU) WUHHKG\n" string str_date = avSeg[0].Trim().Split(' ')[0]; int lPos = str_date.IndexOf('('); if (lPos >= 0) { str_date = str_date.Substring(0, lPos); //27JUL or 27JUL08 } m_date = BaseFunc.str2datetime(str_date, true); m_fromto = avSeg[0].Trim().Split(' ')[1]; //------2 si = new SegmentInfomation[nSegs]; for (int i = 0; i < nSegs; ++i) { si[i] = new SegmentInfomation(); si[i].context = avSeg[i + 1]; string[] siSplit = si[i].context.Split(new string[1] { "\n " }, StringSplitOptions.RemoveEmptyEntries); si[i].b_directly = (siSplit.Length == 1); si[i].fi = new FlightInformation[siSplit.Length]; for (int j = 0; j < siSplit.Length; j++) { int id = i + 1; si[i].fi[j] = new FlightInformation(siSplit[j], id, m_price); si[i].fi[j].a_rebates = (EagleString.egString.LargeThan420(m_date) ? EagleFileIO.arrayOfRebate2 : EagleFileIO.arrayOfRebate); if (si[i].b_directly) { m_flights.Add(si[i].fi[j].info_Flight); m_bunks_lowest.Add(si[i].fi[j].info_Bunk_Lowest); } else { string citypair = si[i].fi[j].info_CityPair.Trim(); if (citypair.Length == 3) { si[i].fi[j].info_CityPair = si[i].fi[j - 1].info_CityPair.Substring(3) + citypair; } } } } avstring = EagleString.egString.trim(avres); } catch (Exception ex) { IsAvReturnString = false; //MessageBox.Show("AvResult Constructor:" + ex.Message); //EagleFileIO.LogWrite("AvResult 构造:" + ex.Message); } }
/// <summary> /// av 型 /// </summary> public void AvResult2(string avres, int price, int distance, bool avh) { try { m_price = price; m_distance = distance; IsAvReturnString = true; string[] sp = new string[16];//分割符为"\ni" for (int i = 0; i < 8; ++i) { int itemp = i + 1; sp[i] = "\n" + itemp.ToString(); sp[i + 8] = "\r\n" + itemp.ToString(); } string[] avSeg = avres.Split(sp, StringSplitOptions.RemoveEmptyEntries); nSegs = avSeg.Length - 1; //"27JUL(THU) WUHHKG\n" string str_date = avSeg[0].Trim().Split(' ')[0]; int lPos = str_date.IndexOf('('); if (lPos >= 0) { str_date = str_date.Substring(0, lPos); //27JUL or 27JUL08 } m_date = BaseFunc.str2datetime(str_date, true); m_fromto = avSeg[0].Trim().Split(' ')[1]; //------2 si = new SegmentInfomation[nSegs]; for (int i = 0; i < nSegs; ++i) { si[i] = new SegmentInfomation(); si[i].context = avSeg[i + 1]; string[] siSplit; if (avh) { siSplit = si[i].context.Split(new string[] { "\n " }, StringSplitOptions.RemoveEmptyEntries); } else { siSplit = si[i].context.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries); } si[i].b_directly = (siSplit.Length == 1); si[i].fi = new FlightInformation[siSplit.Length]; for (int j = 0; j < siSplit.Length; j++) { int id = i + 1; if (avh) { si[i].fi[j] = new FlightInformation(siSplit[j], id, m_price);//这里av与avh不一样 } else { si[i].fi[j] = new FlightInformation(siSplit[j], id, m_price, false);//这里av与avh不一样 } si[i].fi[j].a_rebates = (EagleString.egString.LargeThan420(m_date) ? EagleFileIO.arrayOfRebate2 : EagleFileIO.arrayOfRebate); if (si[i].b_directly) { m_flights.Add(si[i].fi[j].info_Flight); m_bunks_lowest.Add(si[i].fi[j].info_Bunk_Lowest); } } } avstring = EagleString.egString.trim(avres); } catch { IsAvReturnString = false; } }