private string fillImages(string template, Task task) { MatchCollection matches = Regex.Matches(template, "(<Task:Images.*?>)(.*)(<\\/Task:Images>)", RegexOptions.Singleline); if (matches.Count == 0) return template; if (matches.Count > 1) { Console.WriteLine("More than one Task:images Element"); return template; } string resultTpl = ""; string resultStr = ""; string tmp = matches[0].Groups[1].Value; foreach (Image image in task.GetImages()) { image.Save(Properties.Settings.Default.ExportWorkDirectory); resultTpl = matches[0].Groups[2].Value; resultTpl = Regex.Replace(resultTpl, "<Image:Src.*?/>", "" + image.Name); resultStr += resultTpl; } return Regex.Replace(template, "(<Task:Images.*?>)(.*)(<\\/Task:Images>)", resultStr, RegexOptions.Singleline); }
private string fillPoints(string template, Task task) { const string SCORE_REG_EX = "(<Task:Points.*?>)(.*?)(</Task:Points>)"; MatchCollection matches = Regex.Matches(template, SCORE_REG_EX, RegexOptions.Singleline); if (matches.Count == 0) return template; foreach (Match match in matches) { string pointTpl = ""; string pointStr = ""; List<Point> points = task.GetPoints(); // sort by point index... points = points.OrderBy(o => (o.Index)).ToList(); foreach (Point point in points) { pointTpl = match.Groups[2].Value; pointTpl = Regex.Replace(pointTpl, "<Point:Name.*?/>", "" + point.Name); pointTpl = Regex.Replace(pointTpl, "<Point:Index.*?/>", "" + point.Index); pointTpl = Regex.Replace(pointTpl, "<Point:Distance.*?/>", "" + point.Distance); pointTpl = Regex.Replace(pointTpl, "<Point:Latitude.*?/>", "" + point.Latitude); pointTpl = Regex.Replace(pointTpl, "<Point:Longitude.*?/>", "" + point.Longitude); pointTpl = Regex.Replace(pointTpl, "<Point:Type.*?/>", "" + point.Type); pointTpl = Regex.Replace(pointTpl, "<Point:Elevation.*?/>", "" + point.Elevation); pointTpl = Regex.Replace(pointTpl, "<Point:CourseIn.*?/>", "" + point.CourseIn); pointTpl = Regex.Replace(pointTpl, "<Point:CourseOut.*?/>", "" + point.CourseOut); pointTpl = Regex.Replace(pointTpl, "<Point:OzAngle1.*?/>", "" + point.OzAngle1); pointTpl = Regex.Replace(pointTpl, "<Point:OzAngle2.*?/>", "" + point.OzAngle2); pointTpl = Regex.Replace(pointTpl, "<Point:OzAngle12.*?/>", "" + point.OzAngle12); pointTpl = Regex.Replace(pointTpl, "<Point:OzRadius1.*?/>", "" + point.OzRadius1); pointTpl = Regex.Replace(pointTpl, "<Point:OzRadius2.*?/>", "" + point.OzRadius2); pointTpl = Regex.Replace(pointTpl, "<Point:OzLine.*?/>", "" + point.OzLine); pointTpl = Regex.Replace(pointTpl, "<Point:OzMaxAltitude.*?/>", "" + point.OzMaxAltitude); pointTpl = Regex.Replace(pointTpl, "<Point:OzReduce.*?/>", "" + point.OzReduce); pointTpl = Regex.Replace(pointTpl, "<Point:OzType.*?/>", "" + point.OzType); pointStr += pointTpl; } Regex regex = new Regex(SCORE_REG_EX, RegexOptions.Singleline); template = regex.Replace(template, pointStr, 1); } return template; }
public void Export(Contest contest, Clazz clazz, Task task) { string template = Path.Combine(Properties.Settings.Default.ExportTemplateDirectory, filename + ".tpl"); string content = File.ReadAllText(template); //task.GetClazz(); content = fillTemplate(content, contest, clazz, task); string file = Path.Combine(Properties.Settings.Default.ExportWorkDirectory, task.Date + "_" + clazz.Type + "_" + filename); if (Properties.Settings.Default.ExportDebug) Console.WriteLine("[" + DateTime.Now.ToString("HH:mm:ss") + " Export] Exporting file " + file); File.WriteAllText(file, content); }
private string fillTemplate(string template, Contest contest, Clazz clazz, Task task) { template = Regex.Replace(template, "<Contest:Name.*?/>", contest.Name); template = Regex.Replace(template, "<Contest:StartDate.*?/>", contest.StartDate); template = Regex.Replace(template, "<Contest:EndDate.*?/>", contest.EndDate); template = Regex.Replace(template, "<Task:Class.*?/>", clazz.Name); template = Regex.Replace(template, "<Task:Date.*?/>", task.Date); template = Regex.Replace(template, "<Task:Name.*?/>", task.Name); template = Regex.Replace(template, "<General:DateTime.*?/>", DateTime.Now.ToString("yyyy-MM-dd HH:mm")); template = fillImages(template, task); template = fillResults(template, task); template = fillPoints(template, task); return template; }
private string fillResults(string template, Task task) { const string SCORE_REG_EX = "(<Score:Results.*?>)(.*?)(</Score:Results>)"; MatchCollection matches = Regex.Matches(template, SCORE_REG_EX, RegexOptions.Singleline); if (matches.Count == 0) return template; foreach (Match match in matches) { List<Result> results = task.GetResults(); string resultTpl = ""; string resultStr = ""; string tmp = match.Groups[1].Value; string sort = Regex.Match(tmp, @"(?<=\bsort="")[^""]*").Value; if ("Rank".Equals(sort)) results = results.OrderBy(o => o.Rank).ToList(); if ("RankTotal".Equals(sort)) results = results.OrderBy(o => o.RankTotal).ToList(); string when = Regex.Match(tmp, @"(?<=\bwhen="")[^""]*").Value; foreach (Result result in results) { if ("Comment".Equals(when) && String.IsNullOrWhiteSpace(result.Comment)) continue; resultTpl = match.Groups[2].Value; resultTpl = Regex.Replace(resultTpl, "<Result:RankTotal.*?/>", "" + result.RankTotal); resultTpl = Regex.Replace(resultTpl, "<Result:Rank.*?/>", "" + result.Rank); resultTpl = Regex.Replace(resultTpl, "<Result:Cn.*?/>", result.ContestantNumber); resultTpl = Regex.Replace(resultTpl, "<Result:Name.*?/>", result.Name); resultTpl = Regex.Replace(resultTpl, "<Result:Club.*?/>", result.Club); resultTpl = Regex.Replace(resultTpl, "<Result:Aircraft.*?/>", result.Aircraft); resultTpl = Regex.Replace(resultTpl, "<Result:Start.*?/>", result.ScoredStart); resultTpl = Regex.Replace(resultTpl, "<Result:Finish.*?/>", result.ScoredFinish); resultTpl = Regex.Replace(resultTpl, "<Result:Speed.*?/>", "" + result.ScoredSpeed); resultTpl = Regex.Replace(resultTpl, "<Result:Distance.*?/>", "" + result.ScoredDistance); resultTpl = Regex.Replace(resultTpl, "<Result:PointsTotal.*?/>", "" + result.PointsTotal); resultTpl = Regex.Replace(resultTpl, "<Result:Points.*?/>", "" + result.Points); resultTpl = Regex.Replace(resultTpl, "<Result:Penalty.*?/>", "" + result.Penalty); resultTpl = Regex.Replace(resultTpl, "<Result:Evaluated.*?/>", "" + result.Evaluated); resultTpl = Regex.Replace(resultTpl, "<Result:Comment.*?/>", "" + result.Comment); resultStr += resultTpl; } Regex regex = new Regex(SCORE_REG_EX, RegexOptions.Singleline); template = regex.Replace(template, resultStr, 1); } return template; }