Exemplo n.º 1
0
        public async Task Should_be_able_to_parse_lines_asynchronously_from_a_stream_and_split()
        {
            using (var stream = new StringReader(Text))
            {
                var first = await new TextReaderStreamTextReader(stream, Environment.NewLine).Text;

                var        parser = new LineTextParser();
                TextCursor result = await StreamTextCursor.ParseText(first, new TextSpan(0, first.Length), parser);

                while (result.HasCurrent)
                {
                    Console.WriteLine(result.Current);

                    var fields = _toListParser.Parse(result.Current, result.CurrentSpan);

                    Assert.That(fields.HasResult, Is.True);
                    Assert.That(fields.Result.Count, Is.EqualTo(5));

                    if (result.HasNext == false)
                    {
                        break;
                    }

                    result = await result.Next();
                }
            }
        }
Exemplo n.º 2
0
        public override ParsedResult <TSchema> Parse(ParseText text, TextSpan span)
        {
            if (span.Length == 0)
            {
                throw new MacheteParserException("The body was empty");
            }

            int i = span.Start;

            for (; i < span.End; i++)
            {
                if (!char.IsWhiteSpace(text[i]))
                {
                    break;
                }
            }

            if (i + 8 > span.End)
            {
                throw new MacheteParserException("The body must contain at least 8 characters");
            }

            if (text[i] != 'M' || text[i + 1] != 'S' || text[i + 2] != 'H')
            {
                throw new MacheteParserException("The body must start with an MSH segment");
            }

            var settings = GetHL7Settings(text, TextSpan.FromBounds(i, span.End));

            var streamText = new StreamText(text, null);

            var textCursor = new StreamTextCursor(streamText, TextSpan.FromBounds(i, span.End), TextSpan.FromBounds(span.End, span.End), _messageParser);

            return(new HL7ParsedSlice <TSchema>(Schema, settings, textCursor));
        }
Exemplo n.º 3
0
        public override async Task <ParseResult <TSchema> > ParseAsync(StreamText text, TextSpan span)
        {
            var result = await StreamTextCursor.ParseText(text, span, _messageParser);

            if (!result.HasCurrent)
            {
                return(new EmptyParseResult <TSchema>(Schema, this, text, result.NextSpan));
            }

            var settings = ParseSettings(result.InputText, result.CurrentSpan);

            return(new HL7ParseResult <TSchema>(Schema, this, settings, result));
        }
Exemplo n.º 4
0
        public override async Task <ParsedResult <TSchema> > ParseAsync(StreamText text, TextSpan span)
        {
            var result = await StreamTextCursor.ParseText(text, span, _messageParser);

            if (!result.HasValue)
            {
                throw new MacheteParserException("A valid HL7 message was not found.");
            }

            var settings = GetHL7Settings(result.SourceText, result.Span);

            return(new HL7ParsedSlice <TSchema>(Schema, settings, result));
        }
Exemplo n.º 5
0
        public override ParseResult <TSchema> Parse(ParseText text, TextSpan span)
        {
            if (span.Length == 0)
            {
                throw new MacheteParserException("The body was empty");
            }

            int i = span.Start;

            for (; i < span.End; i++)
            {
                if (!char.IsWhiteSpace(text[i]))
                {
                    break;
                }
            }

            if (i + 106 > span.End)
            {
                throw new MacheteParserException("The ISA segment must contain at least 106 characters");
            }

            if (i + 127 > span.End)
            {
                throw new MacheteParserException("The GS segment could not be present due to length");
            }

            if (text[i] != 'I' || text[i + 1] != 'S' || text[i + 2] != 'A')
            {
                throw new MacheteParserException("The body must start with an ISA segment");
            }

            var settings = GetX12Settings(text, TextSpan.FromBounds(i, span.End));

            var streamText = new StreamText(text, null);

            var textCursor = new StreamTextCursor(streamText, TextSpan.FromBounds(i, span.End), TextSpan.FromBounds(span.End, span.End), _messageParser);

            return(new X12ParseResult <TSchema>(Schema, this, settings, textCursor));
        }
Exemplo n.º 6
0
        public override ParseResult <TSchema> Parse(ParseText text, TextSpan span)
        {
            var result = _messageParser.Parse(text, span);

            if (!result.HasResult)
            {
                return(new EmptyParseResult <TSchema>(Schema, this, text, result.Next));
            }

            if (span.Length == 0)
            {
                return(new EmptyParseResult <TSchema>(Schema, this, text, span));
            }

            var settings = ParseSettings(text, result.Result);

            var streamText = new StreamText(text, null);

            var textCursor = new StreamTextCursor(streamText, result.Result, result.Next, _messageParser);

            return(new HL7ParseResult <TSchema>(Schema, this, settings, textCursor));
        }
Exemplo n.º 7
0
        public async Task Should_parse_a_file_line_by_line_async()
        {
            const string fileContent = @"Line 1.
Line 2.
Line 3.
Line 4.
Line 5.
Line 6.
Line 7.
Line 8.";

            using (var stream = new StringReader(fileContent))
            {
                var first = await new TextReaderStreamTextReader(stream, Environment.NewLine).Text;

                var        parser = new LineParser();
                TextCursor result = await StreamTextCursor.ParseText(first, new TextSpan(0, first.Length), parser);

                while (result.HasValue)
                {
                    Console.WriteLine(result.Text);

                    if (result.HasNext == false)
                    {
                        break;
                    }

                    result = await result.Next();
                }


//                var span = await new ReadLineStreamTextSpanProvider(stream, Environment.NewLine).TextSpan;
//                while (span.CanExtend)
//                    span = await span.Extend();
//
//                Console.WriteLine(span.Text);
            }
        }