public void TestParsePqRrBoth() { var pqline = "{(-200.00,0.0),(-200.00,1.0),(-199.00,68.0),(50.31,125.0),(50.34,216.0)},{(95,8.1,3.3),(120.0,0.3,3.3),(125,0.2,1),(226.0,5.0,5.0)}"; BidFileDetail bfd = new BidFileDetail(); List<PriceQuantityPair> pqList = new List<PriceQuantityPair>(); List<RRDetail> rrList = new List<RRDetail>(); BiddingFileParser.DetectAndParsePairs(pqline, bfd, pqList, rrList); Assert.IsTrue(pqList.Count == 5); Assert.IsTrue(rrList.Count == 4); }
public void TestParseRrOnly() { var pqline = "{(95,8.1,3.3),(120.0,0.3,3.3),(125,0.2,1),(226.0,5.0,5.0)}"; BidFileDetail bfd = new BidFileDetail(); List<PriceQuantityPair> pqList = new List<PriceQuantityPair>(); List<RRDetail> rrList = new List<RRDetail>(); BiddingFileParser.DetectAndParsePairs(pqline, bfd, pqList, rrList); Assert.IsTrue(pqList.Count == 0); Assert.IsTrue(rrList.Count == 4); }
public void TestParsePqOnly() { var pqline = "{(-200.00,0.0),(-200.00,1.0),(-199.00,68.0),(50.31,125.0),(50.34,216.0)}"; BidFileDetail bfd = new BidFileDetail(); List<PriceQuantityPair> pqList = new List<PriceQuantityPair>(); List<RRDetail> rrList = new List<RRDetail>(); BiddingFileParser.DetectAndParsePairs(pqline, bfd, pqList, rrList); Assert.IsTrue(pqList.Count == 5); Assert.IsTrue(rrList.Count == 0); }
public static void DetectAndParsePairs(string pqps, BidFileDetail t, List<PriceQuantityPair> pwpslist, List<RRDetail> rrlist) { int i = 0; pqps = pqps.Replace("}", string.Empty); var pairs = pqps.Split('}'); foreach (var pra in pairs) { foreach (var prb in pra.Split(')')) { var pr = prb; // price/quantity pair if (pr.StartsWith(",")) { pr = pr.Substring(1); } // 3 commas means that we know RR values are present if (pr.Split(',').Count() == 3) { RRDetail rd = new RRDetail(); rd.RRDetailId = Guid.NewGuid(); var s1 = pr.Replace(")", ""); s1 = s1.Replace("(", ""); s1 = s1.Replace("{", ""); if (s1.StartsWith(",")) { s1 = s1.Substring(1); } if (!s1.Equals("")) { rd.RRDetailId = Guid.NewGuid(); rd.BidFileDetailId = t.BidFileDetailId; rd.RRQuantity = (s1.Split(',')[0]); rd.RRDown = (s1.Split(',')[1]); rd.RRUp = (s1.Split(',')[2]); rd.Position = i++; rd.CreatedBy = "TCPL\\jon_gaudette"; rd.CreatedDateTime = DateTime.Now; rrlist.Add(rd); } } else { PriceQuantityPair pq = new PriceQuantityPair(); pq.PriceQuantityPairId = Guid.NewGuid(); var s1 = pr.Replace(")", ""); s1 = pr.Replace("(", ""); s1 = s1.Replace("{", ""); if (s1.StartsWith(",")) { s1 = s1.Substring(1); } if (!s1.Equals("")) { pq.BidFileDetailId = t.BidFileDetailId; pq.PriceQuantityPairId = Guid.NewGuid(); pq.Price = Decimal.Parse(s1.Split(',')[0]); pq.Quantity = Decimal.Parse(s1.Split(',')[1]); pq.Position = i++; pq.CreatedBy = "TCPL\\jon_gaudette"; pq.CreatedDateTime = DateTime.Now; pwpslist.Add(pq); } } } } }
/*** * Parse a fil with BidFile properties passed */ public static BidFile ParseFile(BidFile bf, String filename) { String content = File.ReadAllText(filename); String header2 = ""; String header1Match = "PM, (.*), (.*), TCE, APITCE01, , (.*);"; String header2Match = @"((.*),\s*,* (.*), (.*), , (.*), (.*), (.*);)|((.*), (.*),\s+, (.*), (.*), (.*);)"; String bodyMatch = @"(\d+(-)*\d*).*({.*})+,+(.*);"; String mPqrr = @"({.*})"; var applicationType = ""; var marketType = ""; var deliveryDate = ""; var participantId = ""; var userId = ""; var mode = ""; var bidType = ""; var resourceId = ""; var reserveClass = ""; var opresRampRate = ""; var cancelFlag = ""; var bids = new List<BidFileDetail>(); var pwpslist = new List<PriceQuantityPair>(); var rrlist = new List<RRDetail>(); foreach (var line in content.Split('\n')) { Match mHeader1 = Regex.Match(line, header1Match); Match mHeader2 = Regex.Match(line, header2Match); Match mBody = Regex.Match(line, bodyMatch); Match pqrrMatch = Regex.Match(line, mPqrr); var hourRange = ""; if (mHeader1.Success) { applicationType = "PM"; marketType = mHeader1.Groups[1].ToString(); deliveryDate = mHeader1.Groups[2].ToString(); participantId = "TCE"; userId = "APITCE01"; mode = mHeader1.Groups[3].ToString(); bidType = ""; resourceId = ""; reserveClass = ""; opresRampRate = ""; cancelFlag = ""; } else if (mHeader2.Success) { bidType = mHeader2.Groups[2].Value; if (!bidType.Equals("")) { resourceId = mHeader2.Groups[3].ToString(); opresRampRate = mHeader2.Groups[5].ToString(); cancelFlag = mHeader2.Groups[6].ToString(); } else { bidType = mHeader2.Groups[9].ToString(); resourceId = mHeader2.Groups[10].ToString(); reserveClass = mHeader2.Groups[11].ToString(); cancelFlag = mHeader2.Groups[12].ToString(); } } else if (mBody.Success) { // ReSharper disable once SuggestUseVarKeywordEvident BidFileDetail t = new BidFileDetail(); // Header 1 Info t.BidFileId = bf.BidFileId; t.ApplicationType = applicationType; t.MarketType = marketType; t.DeliveryDate = deliveryDate; t.ParticipantId = participantId; t.UserId = userId; t.Mode = mode; // Header 2 info t.BidFileDetailId = Guid.NewGuid(); t.BidType = bidType; t.ResourceId = resourceId; t.OpresRampRate = opresRampRate; t.CancelFlag = cancelFlag; t.ReserveClass = reserveClass; // Bid Body Info hourRange = mBody.Groups[1].Value; var pqps = pqrrMatch.Groups[1].Value; t.ReserveLoadingPoint = mBody.Groups[4].Value; // If the value in ReserveLoadingPoint at this point is just // a comma, we know that there was no reserve loading point. if (t.ReserveLoadingPoint.Contains(",")) { t.ReserveLoadingPoint = null; } // Misc System properties t.CreatedBy = "TCPL\\jon_gaudette"; t.CreatedDateTime = DateTime.Now; /* * If the hourRange contains a hyphen we need to seperate out each hour into their own * records, to ensure we have 24 hours of data for each category. Everythign will be * identical with the exception of the GUID and Hour. */ if (hourRange.Contains("-")) { var from = Int32.Parse(hourRange.Split('-')[0]); var to = Int32.Parse(hourRange.Split('-')[1]); for (var i = from; i <= to; i++) { var bfd = new BidFileDetail { BidFileDetailId = Guid.NewGuid(), BidFileId = bf.BidFileId, Hour = i, ApplicationType = t.ApplicationType, MarketType = t.MarketType, DeliveryDate = t.DeliveryDate, ParticipantId = t.ParticipantId, UserId = t.UserId, Mode = t.Mode, BidType = t.BidType, ResourceId = t.ResourceId, OpresRampRate = t.OpresRampRate, CancelFlag = t.CancelFlag, ReserveClass = t.ReserveClass, ReserveLoadingPoint = t.ReserveLoadingPoint, CreatedBy = "TCPL\\jon_gaudette", CreatedDateTime = DateTime.Now, }; DetectAndParsePairs(pqps, bfd, pwpslist, rrlist); bids.Add(bfd); } } else { t.Hour = Int32.Parse(hourRange); DetectAndParsePairs(pqps, t, pwpslist, rrlist); bids.Add(t); } } } // Write our entity objects to the database. var db = new TBSPEntities1(); db.BidFiles.Add(bf); db.BidFileDetails.AddRange(bids); db.PriceQuantityPairs.AddRange(pwpslist); db.RRDetails.AddRange(rrlist); db.SaveChanges(); return bf; }