ReadLineAsync() public method

public ReadLineAsync ( ) : Task
return Task
コード例 #1
0
ファイル: PemData.cs プロジェクト: hishamco/Signing
        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);
        }
コード例 #2
0
        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;
            }
        }
コード例 #3
0
        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);
        }
コード例 #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();
            }
        }
コード例 #5
0
        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;
        }
コード例 #6
0
        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);
        }
コード例 #7
0
ファイル: Parser.cs プロジェクト: pjlammertyn/MediDocParser
        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;
        }
コード例 #8
0
ファイル: Parser.cs プロジェクト: pjlammertyn/MediDocParser
        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;
        }
コード例 #9
0
        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;
        }
コード例 #10
0
        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);
        }
コード例 #11
0
ファイル: Form1.cs プロジェクト: MadNit/VTab
        public async Task <string> ReadFromProcessAsync(System.IO.TextReader txtRdr)
        {
            string text;

            text = await txtRdr.ReadLineAsync();

            //text = await txtRdr.ReadToEndAsync();
            return(text);
        }
コード例 #12
0
 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);
 }
コード例 #13
0
        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;
        }
コード例 #14
0
 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;
 }
コード例 #15
0
        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();
        }
コード例 #16
0
        /// <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);
        }
コード例 #17
0
ファイル: SrcSrvParser.cs プロジェクト: tmr232/symblr
        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;
        }
コード例 #18
0
 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);
 }
コード例 #19
0
 public static Frequencies Read(TextReader reader)
 {
     var line = reader.ReadLineAsync().Result;
     var count = line.ParseInteger();
     return ReadAll(reader, count, new Frequencies());
 }
コード例 #20
0
        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);
            }
        }
コード例 #21
0
        /// <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();
        }
コード例 #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);
			}
		}
コード例 #23
0
ファイル: BuildInfo.cs プロジェクト: ChadNedzlek/buildtools
        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;
        }
コード例 #24
0
        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;
        }
コード例 #25
0
ファイル: DataClient.cs プロジェクト: ttrider/uEpisodes
        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();
                }
            }
        }
コード例 #26
0
ファイル: Parser.cs プロジェクト: pjlammertyn/MediDocParser
        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;
        }
コード例 #27
0
 private static Attraction ReadOne(TextReader reader)
 {
     var queueTimes = from x in reader.ReadLineAsync().Result.Split(' ')
         select x.ParseInteger();
     return new Attraction(queueTimes);
 }
コード例 #28
0
ファイル: PlsParser.cs プロジェクト: henricj/phonesm
        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);
                }
            }
        }
コード例 #29
0
ファイル: Parser.cs プロジェクト: pjlammertyn/MediDocParser
        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;
        }
コード例 #30
0
 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();
 }
コード例 #31
0
ファイル: Parser.cs プロジェクト: pjlammertyn/MediDocParser
        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;
        }
コード例 #32
0
ファイル: TextReader.cs プロジェクト: tpetazzoni/mono
 public override Task <string> ReadLineAsync()
 {
     lock (this) {
         return(reader.ReadLineAsync());
     }
 }
コード例 #33
0
        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);
        }