static async Task ComposeResultTitleBlock(TextWriter writer, Func<int> lineNumberGetter, Action<int> lineNumberSetter, ResultTitle result) { var lineNumber = lineNumberGetter(); //(lijn 1:)#Rc positie 1-3:duidt begin aan van verslag) lineNumber++; await writer.WriteLineAsync("#Rc"); //Lijn 2: identificatie van de analyse //Formaat: //ofwel: de Medidoc code van de analyse (8 karakters) //ofwel: een code door het labo zelf gevormd (8 karakters) //ofwel: een ! gevolgd door de naam v.d. analyse (max. 56 karakters) lineNumber++; if (!string.IsNullOrEmpty(result.Code)) await writer.WriteLineAsync(result.Code?.TrimToMaxSize(8)); else await writer.WriteLineAsync(string.Concat("!", result.Name?.TrimToMaxSize(56))); //Lijn 3,4,... : commentaar (facultatief) //Een willekeurig aantal lijnen met op elke lijn: // ofwel: max. 75 karakters vrije tekst (beperking niet meer van toepassing voor de pakketten van Corilus nv) //- ofwel: de code van een commentaarmodule (max 1 code per lijn) if (result.Comment != null) using (var sr = new StringReader(result.Comment)) { string line; while ((line = sr.ReadLine()) != null) { lineNumber++; await writer.WriteLineAsync(line.TrimToMaxSize(75)); } } lineNumber++; await writer.WriteLineAsync("#R/"); lineNumberSetter(lineNumber); }
static async Task<ResultTitle> ParseResultTitleBlock(TextReader reader, Func<int> lineNumberGetter, Action<int> lineNumberSetter, IDictionary<int, IList<string>> parserErrors) { //(lijn 1:)#Rc positie 1-3:duidt begin aan van verslag) var title = new ResultTitle(); var lineNumber = lineNumberGetter(); //Lijn 2: identificatie van de analyse //Formaat: //ofwel: de Medidoc code van de analyse (8 karakters) //ofwel: een code door het labo zelf gevormd (8 karakters) //ofwel: een ! gevolgd door de naam v.d. analyse (max. 56 karakters) lineNumber++; var id = (await reader.ReadLineAsync())?.Trim(); if (id?.StartsWith("!") ?? false) title.Name = id?.TrimStart('!').CheckMaxSize(56, parserErrors, lineNumber); else title.Code = id?.CheckMaxSize(8, parserErrors, lineNumber); //Lijn 3,4,... : commentaar (facultatief) //Een willekeurig aantal lijnen met op elke lijn: // ofwel: max. 75 karakters vrije tekst (beperking niet meer van toepassing voor de pakketten van Corilus nv) //- ofwel: de code van een commentaarmodule (max 1 code per lijn) var sb = new StringBuilder(); string line = null; lineNumber++; while ((line = (await reader.ReadLineAsync())) != null && !line.StartsWith(@"#R/")) { sb.AppendLine(line); lineNumber++; } title.Comment = sb.Length > 0 ? sb.ToString() : null; lineNumberSetter(lineNumber); return title; }