コード例 #1
0
ファイル: Composer.cs プロジェクト: pjlammertyn/MediDocParser
        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);
        }
コード例 #2
0
ファイル: Parser.cs プロジェクト: pjlammertyn/MediDocParser
        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;
        }