ReadLineAsync() public method

public ReadLineAsync ( ) : Task
return Task
Example #1
0
        public static async Task<PemData> TryDecodeAsync(TextReader input)
        {
            // Read the header
            var header = GetBarrierName(await input.ReadLineAsync());
            if (header == null)
            {
                return null;
            }

            // Read the data
            List<string> dataLines = new List<string>();
            string line;
            while (!(line = await input.ReadLineAsync()).StartsWith("-"))
            {
                dataLines.Add(line);
            }
            byte[] data;
            try
            {
                data = Convert.FromBase64String(String.Concat(dataLines));
            }
            catch
            {
                return null; // Invalid Base64 String!
            }

            // Read the footer
            var footer = GetBarrierName(line);
            return new PemData(header, data, footer);
        }
        private async Task ReadEventsFromReader(TextReader reader, IContext context)
        {
            try
            {
                string eventLine;
                while ((eventLine = await reader.ReadLineAsync()) != null)
                {
                    CheckIfCancelled();

                    if (eventLine.StartsWith("event: "))
                    {
                        string dataLine = await reader.ReadLineAsync();

                        cts.Token.ThrowIfCancellationRequested();

                        string eventName = ParseEventLine(eventLine);
                        string json = ParseEventLine(dataLine);
                        IJsonObject tree = context.Serializer.Deserialize(json);
                    }
                    else
                    {
                        throw new InvalidOperationException($"Expected event but received: {eventLine}");
                    }
                }
            }
            catch (TaskCanceledException)
            {
                if (!disposed)
                    throw;
            }
        }
        public static Attractions Read(TextReader reader)
        {
            // ReadOne the number of attractions followed by the time between attractions.
            reader.ReadLineAsync().Result.ParseInteger().VerifyTimesCount();

            var times = from t in reader.ReadLineAsync().Result.Split(' ') select t.ParseInteger();

            return new Attractions(times);
        }
Example #4
0
        public static async IAsyncEnumerable <string> EnumerateLinesAsync(this TextReader reader)
        {
            var line = await reader.ReadLineAsync();

            while (line != null)
            {
                yield return(line);

                line = await reader.ReadLineAsync();
            }
        }
        private static async Task<Article> ParseMetadataAsync(TextReader textReader, FileSystemInfo fileInfo)
        {
            var line = await textReader.ReadLineAsync().ConfigureAwait(false);

            if (line == null || !line.Equals("<!--"))
            {
                throw new FormatException($"Cannot parse the file '{fileInfo.FullName}' to an article. The first line has to begin with an XML comment tag '<!--'.");
            }

            var article = new Article();

            while ((line = await textReader.ReadLineAsync().ConfigureAwait(false)) != null && line != "-->")
            {
                var pair = line.Split(new[] { ':' }, 2, StringSplitOptions.None);

                if (pair.Length != 2)
                    continue;

                var key = pair[0].Trim().ToLower();
                var value = pair[1].Trim();

                switch (key)
                {
                    case "title":
                        article.Title = value;
                        break;

                    case "author":
                        article.Author = value;
                        break;

                    case "published":
                        DateTime publishDateTime;
                        if (DateTime.TryParse(value, out publishDateTime))
                        {
                            article.PublishDateTime = publishDateTime;
                        }
                        break;

                    case "tags":
                        var tags = value.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                        article.Tags = tags;
                        break;
                }
            }

            if (line != "-->")
            {
                throw new FormatException($"Cannot parse the file '{fileInfo.FullName}' to an article. Couldn't find the closing tag of the meta data block.");
            }

            return article;
        }
        private static Plan ReadOne(TextReader reader, Attractions attractions)
        {
            var count = reader.ReadLineAsync().Result
                .ParseInteger().VerifyDestinationCount(attractions);

            var destinations
                = from a in reader.ReadLineAsync().Result.Split(' ')
                    select a.ParseInteger().VerifyDestination(attractions);

            // ReSharper disable once PossibleMultipleEnumeration
            destinations.Count().VerifyValue(count);

            // ReSharper disable once PossibleMultipleEnumeration
            return new Plan(attractions, destinations);
        }
Example #7
0
        public static async Task<IEnumerable<Lab>> ParseLabReport(TextReader reader)
        {
            var labs = new List<Lab>();
            var lineNumber = 1;

            var line = await reader.ReadLineAsync();
            do
            {
                if (line != null)
                    labs.Add(await ParseLabBlock(reader, () => lineNumber, (ln) => lineNumber = ln, line));
                lineNumber++;
            }
            while ((line = await reader.ReadLineAsync()) != null);

            return labs;
        }
Example #8
0
        public static async Task<IEnumerable<ExecutingDoctor>> ParseTextReport(TextReader reader)
        {
            var executingDoctors = new List<ExecutingDoctor>();
            var lineNumber = 1;

            var line = await reader.ReadLineAsync();
            do
            {
                if (line != null)
                    executingDoctors.Add(await ParseTextReportDoctorBlock(reader, () => lineNumber, (ln) => lineNumber = ln, line));
                lineNumber++;
            }
            while ((line = await reader.ReadLineAsync()) != null);

            return executingDoctors;
        }
        private static Frequencies ReadAll(TextReader reader, int count, Frequencies frequencies)
        {
            /* The order in which these are read can be peculiar. Watch for the roll over of the
             * clock to happen when the value is suddenly less than the former minimum. And even
             * this is not a great way of doing it without also incorporating some notion of the
             * date itself. */

            const int minutesPerDay = Constants.MinutesPerDay;

            int? previousTimeMinutes = null;

            while (count-- > 0)
            {
                var line = reader.ReadLineAsync().Result;

                var parts = line.Split(' ');

                var startingTimeMinutes = parts[0].ToMinutes();

                // Normalize when the previous was greater than this one.
                if (previousTimeMinutes > startingTimeMinutes)
                    startingTimeMinutes += minutesPerDay;

                var waitTimeMinutes = parts[1].ParseInteger();

                frequencies.Entries[startingTimeMinutes] = waitTimeMinutes;

                previousTimeMinutes = startingTimeMinutes;
            }

            return frequencies;
        }
        public static IEnumerable<Plan> ReadAll(TextReader reader, Attractions attractions)
        {
            // Read the attraction queries.
            var count = reader.ReadLineAsync().Result.ParseInteger().VerifyQueryCount();

            while (count-- > 0)
                yield return ReadOne(reader, attractions);
        }
Example #11
0
File: Form1.cs Project: MadNit/VTab
        public async Task <string> ReadFromProcessAsync(System.IO.TextReader txtRdr)
        {
            string text;

            text = await txtRdr.ReadLineAsync();

            //text = await txtRdr.ReadToEndAsync();
            return(text);
        }
 private static Patron ReadOne(TextReader reader)
 {
     var line = reader.ReadLineAsync().Result;
     // Accounting for discrepancies in the input file where Count > the actual Count(Patron)
     if (string.IsNullOrEmpty(line)) return null;
     var parts = line.Split(' ');
     var timeOfDayMinutes = parts[0].ToMinutes();
     var stopNumber = parts[1].ParseInteger();
     var direction = TripConstraint.Directions[parts[2][0]];
     return new Patron(timeOfDayMinutes, stopNumber, direction);
 }
        public static ThemePark Read(TextReader reader)
        {
            var values = from x in reader.ReadLineAsync().Result.Split(' ')
                select x.ParseInteger();

            // ReSharper disable once PossibleMultipleEnumeration
            var attractionCount = values.ElementAt(0);

            // ReSharper disable once PossibleMultipleEnumeration
            var maxHoursPerDay = values.ElementAt(1);

            var attractions = Attraction.ReadAll(reader, attractionCount).ToList();

            var result = new ThemePark(attractions, maxHoursPerDay);

            var queryCount = reader.ReadLineAsync().Result.ParseInteger();

            result.Guests = Guest.ReadAll(reader, queryCount, result).ToList();

            return result;
        }
 public static IEnumerable<Patron> ReadAll(TextReader reader)
 {
     var line = reader.ReadLineAsync().Result;
     var count = line.ParseInteger();
     var result = new List<Patron>();
     while (count-- > 0)
     {
         var patron = ReadOne(reader);
         // Accounting for an error in the input file.
         if (patron == null) break;
         result.Add(patron);
     }
     return result;
 }
        private static async Task<string> ReadHeaderAsync(TextReader reader, string headerName)
        {
            string line = await reader.ReadLineAsync().ConfigureAwait(false);
            if (string.IsNullOrEmpty(line))
            {
                throw new FormatException(string.Format(CultureInfo.InvariantCulture, "{0} header is expected.", headerName));
            }

            string[] parts = line.Split(':');
            if (parts.Length != 2)
            {
                throw new FormatException(string.Format(CultureInfo.InvariantCulture, "Unexpected header format. {0} header is expected. Actual header: {1}", headerName, line));
            }

            if (parts[0] != headerName)
            {
                throw new FormatException(string.Format(CultureInfo.InvariantCulture, "{0} header is expected. Actual header: {1}", headerName, line));
            }

            return parts[1].Trim();
        }
        /// <summary>
        /// Reads and parses the lines from the <paramref name="reader"/>.
        /// </summary>
        /// <param name="reader"></param>
        private void Read(TextReader reader)
        {
            TryParseFirst(reader.ReadLineAsync().Result);

            TryParseSecond(reader.ReadLineAsync().Result);
        }
Example #17
0
        public static async Task<SourceInformationCollection> ParseAsync(TextReader reader, CancellationToken cancellationToken)
        {
            const int State_Start = 0;
            const int State_Ini = 1;
            const int State_Vars = 2;
            const int State_Files = 3;

            var vars = new Dictionary<string, SrcSrvExpression>(StringComparer.OrdinalIgnoreCase);
            var lineVars = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
            var result = new SourceInformationCollection();

            var state = State_Start;
            string line;
            while ((line = await reader.ReadLineAsync()) != null)
            {
                cancellationToken.ThrowIfCancellationRequested();

                switch (state)
                {
                    case State_Start:
                        if (line.StartsWith("SRCSRV: ini"))
                            state = State_Ini;
                        break;
                    case State_Ini:
                        if (line.StartsWith("SRCSRV: variables"))
                            state = State_Vars;
                        break;
                    case State_Vars:
                        if (line.StartsWith("SRCSRV: source files"))
                        {
                            if (!vars.ContainsKey("SRCSRVTRG")) return null;
                            state = State_Files;
                        }
                        else
                        {
                            var index = line.IndexOf('=');
                            if (index > 0)
                            {
                                var var = ParseVariable(line.Substring(index + 1));
                                if (var == null) return null;
                                vars.Add(line.Substring(0, index), var);
                            }
                        }

                        break;
                    case State_Files:
                        var split = line.Split('*');
                        if (!string.IsNullOrWhiteSpace(line) && split.Length > 0)
                        {
                            lineVars.Clear();
                            for (var i = 0; i < split.Length; i++)
                                lineVars[string.Format(CultureInfo.InvariantCulture, "VAR{0}", i + 1)] = split[i];
                            var trg = vars["SRCSRVTRG"].Evaluate(vars, lineVars);
                            result.Add(new SourceInformation(split[0], trg));
                        }

                        break;
                }
            }

            return result;
        }
 private static TripConstraint ReadOne(TextReader reader, int destination)
 {
     var line = reader.ReadLineAsync().Result;
     var parts = line.Split(' ');
     var departureTimeMinutes = parts[0].ToMinutes();
     var maxAllowableDepartureTimeMinutes = parts[1].ToMinutes();
     return new TripConstraint(destination, departureTimeMinutes, maxAllowableDepartureTimeMinutes);
 }
 public static Frequencies Read(TextReader reader)
 {
     var line = reader.ReadLineAsync().Result;
     var count = line.ParseInteger();
     return ReadAll(reader, count, new Frequencies());
 }
        private void Read(TextReader reader)
        {
            _count = int.Parse(PrepareText(reader.ReadLineAsync().Result));

            for (var i = 0; i < _count; i++)
            {
                var basePrice = int.Parse(PrepareText(reader.ReadLineAsync().Result));
                var addr = new Address(reader.ReadLineAsync().Result);

                var taxAmount = TaxCalculator.Calculate(basePrice, addr.State);
                var shippingAmount = ShippingCalculator.Calculate(addr.ZipCode);

                _writer.WriteLine(basePrice + taxAmount + shippingAmount);
            }
        }
        /// <summary>
        /// Reads the scenario from the <paramref name="reader"/>.
        /// </summary>
        /// <param name="reader"></param>
        private void Read(TextReader reader)
        {
            int minionCount;

            TryParseFirst(reader.ReadLineAsync().Result, out minionCount);

            TryParseSecond(reader.ReadLineAsync().Result, minionCount);

            Wizard = new Player();
        }
Example #22
0
		/// <summary>
		///   Handles process output.
		/// </summary>
		private async Task HandleOutput(TextReader reader)
		{
			string text;
			while ((text = await reader.ReadLineAsync()) != null)
			{
				if (!String.IsNullOrWhiteSpace(text))
					_outputCallback?.Invoke(text);
			}
		}
Example #23
0
        private static async Task<Dictionary<string, string>> ReadPackageListAsync(TextReader reader)
        {
            var packages = new Dictionary<string, string>();
            string currentLine;
            while ((currentLine = await reader.ReadLineAsync()) != null)
            {
                int spaceIndex = currentLine.IndexOf(' ');

                string id = currentLine.Substring(0, spaceIndex);
                string version = currentLine.Substring(spaceIndex + 1);

                if (packages.ContainsKey(id))
                {
                    throw new Exception($"More than one package list entry with id '{id}'.");
                }
                packages[id] = version;
            }
            return packages;
        }
        private static async Task<Uri> ReadAddressAsync(TextReader reader)
        {
            string addressLine = await reader.ReadLineAsync().ConfigureAwait(false);
            if (string.IsNullOrEmpty(addressLine))
            {
                throw new FormatException("Transmission address is expected.");
            }

            var address = new Uri(addressLine);
            return address;
        }
Example #25
0
        public static async Task ProcessRecordsAsync(TextReader reader, string terminator, Action<string[]> factory, params string[] fieldNames)
        {
            if (reader == null) throw new ArgumentNullException("reader");
            if (factory == null) throw new ArgumentNullException("factory");
            if (fieldNames.Length == 0) throw new ArgumentException("fieldNames");

            var readLine = await reader.ReadLineAsync();
            if (readLine != null)
            {
                var header = readLine;
                while (string.IsNullOrWhiteSpace(header))
                {
                    header = await reader.ReadLineAsync();
                }
                header = header.ToLower();
                var fields = new List<string>(header.Split(',').Select(h => h.Trim()));

                var relevantFields = fieldNames.Select(name => fields.IndexOf(name.ToLower())).ToList();

                string line = await reader.ReadLineAsync();
                while (line != null)
                {
                    if (!string.IsNullOrWhiteSpace(line))
                    {
                        if (terminator != null && line.Contains(terminator))
                        {
                            break;
                        }

                        var row = ParseRow(line).ToList();

                        if (row.Count == fields.Count)
                        {
                            factory(relevantFields.Select(index => row[index]).ToArray());
                        }
                    }
                    line = await reader.ReadLineAsync();
                }
            }
        }
Example #26
0
        static async Task<TextResult> ParseTextResultBlock(TextReader reader, Func<int> lineNumberGetter, Action<int> lineNumberSetter, IDictionary<int, IList<string>> parserErrors)
        {
            //(lijn 1:)#Rb positie 1-3:duidt begin aan van verslag)
            var result = new TextResult();
            var lineNumber = lineNumberGetter();

            //(lijn 2:) evt identificatie van de analyse (positie 1-56)
            //formaat: '!'gevolgd door trefwoord
            lineNumber++;
            var line = await reader.ReadLineAsync();
            if (line.StartsWith(@"!"))
            {
                result.Name = line?.Trim();
                lineNumber++;
                line = await reader.ReadLineAsync();
            }

            //(lijn 3: vanaf hier begint het eigenlijke verslag)
            var sb = new StringBuilder();
            do
            {
                sb.AppendLine(line);
                lineNumber++;
            }
            while ((line = (await reader.ReadLineAsync())) != null && !line.StartsWith(@"#R/"));
            result.Text = sb.Length > 0 ? sb.ToString() : null;

            lineNumberSetter(lineNumber);
            return result;
        }
 private static Attraction ReadOne(TextReader reader)
 {
     var queueTimes = from x in reader.ReadLineAsync().Result.Split(' ')
         select x.ParseInteger();
     return new Attraction(queueTimes);
 }
Example #28
0
        public async Task<bool> ParseAsync(TextReader tr)
        {
            _tracks.Clear();
            _numberOfEntries = null;
            _version = null;
            _foundPlaylist = false;
            _orderedTracks = null;

            for (; ; )
            {
                var line = await tr.ReadLineAsync().ConfigureAwait(false);

                if (null == line)
                {
                    _orderedTracks = _tracks.OrderBy(kv => kv.Key).Select(kv => kv.Value).ToArray();

                    if (_numberOfEntries.HasValue && _numberOfEntries.Value != _orderedTracks.Length)
                        Debug.WriteLine("PlsParser.Parse() entries mismatch ({0} != {1})", _numberOfEntries, _orderedTracks.Length);

                    return _foundPlaylist;
                }

                // Skip blank lines
                if (string.IsNullOrWhiteSpace(line))
                    continue;

                line = line.Trim();

                if (line.Length < 1)
                    continue;

                var firstChar = line[0];

                // Skip comments
                if (';' == firstChar || '#' == firstChar)
                    continue;

                if (!_foundPlaylist)
                {
                    if (!string.Equals("[playlist]", line, StringComparison.OrdinalIgnoreCase))
                    {
                        Debug.WriteLine("PlsParser.Parser() invalid line while expecting parser: " + line);
                        continue;
                    }

                    _foundPlaylist = true;
                }
                else
                {
                    var index = line.IndexOf('=');

                    if (index <= 0 || index + 1 >= line.Length)
                    {
                        Debug.WriteLine("PlsParser.Parser() invalid line: " + line);
                        continue;
                    }

                    var key = line.Substring(0, index).Trim();
                    var value = line.Substring(index + 1, line.Length - (index + 1)).Trim();

                    if (string.Equals("NumberOfEntries", key, StringComparison.OrdinalIgnoreCase))
                        HandleNumberOfEntries(value, line);
                    else if (string.Equals("Version", key, StringComparison.OrdinalIgnoreCase))
                        HandleVersion(value, line);
                    else
                        HandleTrack(line, key, value);
                }
            }
        }
Example #29
0
        static async Task<Lab> ParseLabBlock(TextReader reader, Func<int> lineNumberGetter, Action<int> lineNumberSetter, string line)
        {
            var lab = new Lab();
            var lineNumber = lineNumberGetter();

            //Lijn 1: “Medidoc” identificatienummer van het laboratorium. 
            //formaat: 4 karakters en wordt als volgt gevormd: de eerste letter van de provincie (W,O,A,B,L) gevolgd door de eerste twee cijfers van de postkode, gevolgd door een volgnummer binnen de stad of gemeente. (vb. W841 voor een labo te Oostende)
            if (line == null || !Regex.Match(line.Trim(), @"[WOABL]\d{3}", RegexOptions.IgnoreCase).Success)
                lab.ParserErrors.AddItem(lineNumber, $"Not valid start of lab block expected W,O,A,B,L followed by three digits but got '{line}'");
            lab.Id = line?.Trim();

            //Lijn 2 6: Identificatiegegevens van het labo (naam, adres, tel ...)
            //formaat: vrije tekst met maximaal 50 karakters per lijn .
            lineNumber++;
            lab.Name = (await reader.ReadLineAsync())?.CheckMaxSize(50, lab.ParserErrors, lineNumber).Trim();
            lineNumber++;
            lab.Address1 = (await reader.ReadLineAsync())?.CheckMaxSize(50, lab.ParserErrors, lineNumber).Trim();
            lineNumber++;
            lab.Address2 = (await reader.ReadLineAsync())?.CheckMaxSize(50, lab.ParserErrors, lineNumber).Trim();
            lineNumber++;
            lab.IdentificationData1 = (await reader.ReadLineAsync())?.CheckMaxSize(50, lab.ParserErrors, lineNumber).Trim();
            lineNumber++;
            lab.IdentificationData2 = (await reader.ReadLineAsync())?.CheckMaxSize(50, lab.ParserErrors, lineNumber).Trim();

            //Lijn 7: datum (+ eventueel tijdstip) aanmaak
            //formaat: JJJJMMDD(+evtHHMM)
            lineNumber++;
            lab.Date = (await reader.ReadLineAsync())?.ToNullableDatetime("yyyyMMddHHmm", "yyyyMMdd", "yyMMdd");

            lab.RequestingDoctor = new Doctor();
            //Lijn 8: RIZIV nummer aanvragende arts
            //formaat: C/CCCCC/CC/CCC
            lineNumber++;
            line = await reader.ReadLineAsync();
            if (line == null || !Regex.Match(line.Trim(), @"\d/\d{5}/\d{2}/\d{3}", RegexOptions.IgnoreCase).Success)
                lab.ParserErrors.AddItem(lineNumber, $"Not a valid rizivnumber: '{line}' of format C/CCCCC/CC/CCC");
            lab.RequestingDoctor.RizivNr = line?.Replace("/", string.Empty).Trim();

            //lijn 9: Naam (positie 1-24) + Voornaam (positie 25-40) aanvragende arts
            lineNumber++;
            var name = (await reader.ReadLineAsync())?.CheckMaxSize(40, lab.ParserErrors, lineNumber);
            lab.RequestingDoctor.LastName = name?.Substring(0, name.Length > 24 ? 24 : name.Length).Trim();
            if (name?.Length > 24)
                lab.RequestingDoctor.FirstName = name?.Substring(24).Trim();

            lineNumber++;
            line = await reader.ReadLineAsync();
            do
            {
                if (line == null || !line.StartsWith("#A"))
                {
                    lab.ParserErrors.AddItem(lineNumber, $"Not valid start of patient block expected '#A' but got '{line}'");
                    break;
                }

                if (line != null)
                    lab.Patients.Add(await ParsePatientBlock(reader, () => lineNumber, (ln) => lineNumber = ln, lab.ParserErrors, line, true));

                lineNumber++;
            }
            while ((line = (await reader.ReadLineAsync())) != null && !line.StartsWith(@"#/"));

            if (line == null || !line.StartsWith(@"#/"))
                lab.ParserErrors.AddItem(lineNumber, $"Expected end of lab blok '#/' but got '{line}'");

            lineNumberSetter(lineNumber);
            return lab;
        }
 private static IEnumerable<int> ReadStopIntervalMinutes(TextReader reader)
 {
     var line = reader.ReadLineAsync().Result;
     // TODO: may verify count with array length.
     var count = line.ParseInteger();
     line = reader.ReadLineAsync().Result;
     return from x in line.Split(' ') select x.ParseInteger();
 }
Example #31
0
        static async Task<ExecutingDoctor> ParseTextReportDoctorBlock(TextReader reader, Func<int> lineNumberGetter, Action<int> lineNumberSetter, string line)
        {
            var executingDoctor = new ExecutingDoctor();
            var lineNumber = lineNumberGetter();

            //(lijn 1:)RIZIV-nummer uitvoerend arts of paramedicus (positie 1-14)
            //formaat: C/CCCCC/CC/CCC
            if (line == null || !Regex.Match(line?.Trim(), @"\d/\d{5}/\d{2}/\d{3}", RegexOptions.IgnoreCase).Success)
                executingDoctor.ParserErrors.AddItem(lineNumber, $"Not a valid rizivnumber: '{line}' of format C/CCCCC/CC/CCC");
            executingDoctor.RizivNr = line?.Replace("/", string.Empty).Trim();

            //(lijn 2:)Naam (positie 1-24) + Voornaam (positie 25-40)
            //uitvoerend arts of paramedicus
            lineNumber++;
            var name = (await reader.ReadLineAsync())?.CheckMaxSize(40, executingDoctor.ParserErrors, lineNumber);
            executingDoctor.LastName = name?.Substring(0, name.Length > 24 ? 24 : name.Length).Trim();
            if (name?.Length > 24)
                executingDoctor.FirstName = name?.Substring(24).Trim();

            //(lijn 3:)Straat (positie 1-35) + nr (positie 36-45)
            //uitvoerend arts of paramedicus
            lineNumber++;
            var address = (await reader.ReadLineAsync())?.CheckMaxSize(45, executingDoctor.ParserErrors, lineNumber);
            executingDoctor.Address.Street = address?.Substring(0, address.Length > 35 ? 35 : address.Length).Trim();
            if (address?.Length > 35)
                executingDoctor.Address.HouseNr = address?.Substring(35).Trim();

            //(lijn 4:)Postcode (positie 1-10) + Gemeente (positie 11-45)
            //uitvoerend arts of paramedicus
            lineNumber++;
            address = (await reader.ReadLineAsync())?.CheckMaxSize(45, executingDoctor.ParserErrors, lineNumber);
            executingDoctor.Address.PostalCode = address?.Substring(0, address.Length > 10 ? 10 : address.Length).Trim();
            if (address?.Length > 10)
                executingDoctor.Address.Town = address?.Substring(10).Trim();

            //(lijn 5:)Telefoon- en faxnummer (vrije tekst) (positie 1-50)
            //uitvoerend arts of paramedicus
            lineNumber++;
            executingDoctor.Phone = (await reader.ReadLineAsync())?.CheckMaxSize(50, executingDoctor.ParserErrors, lineNumber).Trim();

            //(lijn 6:)Boodschap (vrije tekst) (positie 1-50)
            lineNumber++;
            executingDoctor.Message = (await reader.ReadLineAsync())?.CheckMaxSize(50, executingDoctor.ParserErrors, lineNumber).Trim();

            //(lijn 7:)Datum(+eventueel tijdstip) aanmaak diskette (positie 1-10)
            //formaat: JJJJMMDD(+evtHHMM)
            executingDoctor.Date = (await reader.ReadLineAsync())?.ToNullableDatetime("yyyyMMddHHmm", "yyyyMMdd", "yyMMdd");


            executingDoctor.RequestingDoctor = new Doctor();
            //(lijn 8:)RIZIV-nummer aanvragende arts (positie 1-14)
            //formaat: C/CCCCC/CC/CCC
            lineNumber++;
            executingDoctor.RequestingDoctor.RizivNr = (await reader.ReadLineAsync())?.Replace("/", string.Empty).Trim();

            //(lijn 9:)Naam (positie 1-24) + Voornaam (positie 25-40)
            //aanvragende arts
            lineNumber++;
            name = (await reader.ReadLineAsync())?.CheckMaxSize(40, executingDoctor.ParserErrors, lineNumber);
            executingDoctor.RequestingDoctor.LastName = name?.Substring(0, name.Length > 24 ? 24 : name.Length).Trim();
            if (name?.Length > 24)
                executingDoctor.RequestingDoctor.FirstName = name?.Substring(24).Trim();

            lineNumber++;
            line = await reader.ReadLineAsync();
            do
            {
                if (line == null || !line.StartsWith("#A"))
                    executingDoctor.ParserErrors.AddItem(lineNumber, $"Not valid start of patient block expected '#A' but got '{line}'");

                if (line != null)
                    executingDoctor.Patients.Add(await ParsePatientBlock(reader, () => lineNumber, (ln) => lineNumber = ln, executingDoctor.ParserErrors, line, false));
                lineNumber++;
            }
            while ((line = (await reader.ReadLineAsync())) != null && !line.StartsWith(@"#/"));

            //line = sr.ReadLine();
            if (line == null || !line.StartsWith(@"#/"))
                executingDoctor.ParserErrors.AddItem(lineNumber, $"Expected end of doctor blok '#/' but got '{line}'");

            lineNumberSetter(lineNumber);
            return executingDoctor;
        }
Example #32
0
 public override Task <string> ReadLineAsync()
 {
     lock (this) {
         return(reader.ReadLineAsync());
     }
 }
        private static Guest ReadOne(TextReader reader, IReadOnlyThemePark themePark)
        {
            var lines = new[]
            {
                reader.ReadLineAsync().Result,
                reader.ReadLineAsync().Result,
                reader.ReadLineAsync().Result,
            };

            // TODO: may check hours are not after park closed
            var entryTimeMinutes = lines[0].ParseInteger();

            VerifyWithinParkHours(entryTimeMinutes, themePark.MaxHoursPerDay);

            var visitCount = lines[1].ParseInteger().VerifyDesiredAttractions();

            var visits = from x in lines[2].Split(' ')
                select x.ParseInteger().VerifyRange(0, themePark.ReadOnlyAttractions.Count - 1);

            // ReSharper disable once PossibleMultipleEnumeration
            visits.Count().VerifyValue(visitCount);

            // ReSharper disable once PossibleMultipleEnumeration
            return new Guest(entryTimeMinutes, themePark, visits);
        }