void ISectionParser.Populate(AreaToken token, Operation operation) { if (token.Identifier == "Einsatznummer") { operation.OperationNumber = token.Value; } }
void ISectionParser.Populate(AreaToken token, Operation operation) { string msg = token.Value; if (token.Identifier == KeywordKeyword) { operation.Keywords.Keyword = msg; } else if (token.Identifier == KeywordB) { operation.Keywords.B = msg; } else if (token.Identifier == KeywordR) { operation.Keywords.R = msg; } else if (token.Identifier == KeywordS) { operation.Keywords.S = msg; } else if (token.Identifier == KeywordT) { operation.Keywords.T = msg; } }
void ISectionParser.Populate(AreaToken token, Operation operation) { // Just append... operation.Comment += token.OriginalValue + "\n"; }
void ISectionParser.Populate(AreaToken token, Operation operation) { // Determine which location to populate PropertyLocation location = null; switch (AffectedLocation) { case "Zielort": location = operation.Zielort; break; default: case "Einsatzort": location = operation.Einsatzort; break; } string msg = token.Value; if (token.Identifier == KeywordStreet) { location.Street = msg; } else if (token.Identifier == KeywordStreetNumber) { location.StreetNumber = msg; } else if (token.Identifier == KeywordCity) { location.ZipCode = ReadZipCodeFromCity(msg); if (string.IsNullOrWhiteSpace(location.ZipCode)) { Logger.Instance.LogFormat(LogType.Warning, this, "Could not find a zip code for city '{0}'. Route planning may fail or yield wrong results!", location.City); } location.City = msg.Remove(0, location.ZipCode.Length).Trim(); // The City-text often contains a dash after which the administrative city appears multiple times (like "City A - City A City A"). // However we can (at least with google maps) omit this information without problems! int dashIndex = location.City.IndexOf('-'); if (dashIndex != -1) { // Ignore everything after the dash location.City = location.City.Substring(0, dashIndex); } } else if (token.Identifier == KeywordIntersection) { location.Intersection = msg; } else if (token.Identifier == KeywordProperty) { location.Property = msg; } }
private static IEnumerable<AreaToken> GetTokensInLine(IList<string> validTokens, string line) { List<AreaToken> tokens = new List<AreaToken>(); foreach (string tokenInQuestion in validTokens) { int index = line.IndexOf(tokenInQuestion, StringComparison.CurrentCultureIgnoreCase); if (index == -1) { continue; } AreaToken at = new AreaToken(line); at.Identifier = tokenInQuestion; at.Occurrence = index; tokens.Add(at); } // Second step: Parse the values, knowing successors LinkedList<AreaToken> linkedList = new LinkedList<AreaToken>(tokens); LinkedListNode<AreaToken> currentToken = linkedList.First; while (currentToken != null) { int from = currentToken.Value.Occurrence; int to = currentToken.Next != null ? currentToken.Next.Value.Occurrence : 0; currentToken.Value.Value = GetMessageText(line, currentToken.Value.Identifier, from, to); if (currentToken.Next == null) { break; } currentToken = currentToken.Next; } return linkedList; }
internal void TokenizeLines() { IList<string> validTokens = GetValidTokens(); // Merge all lines to check for tokens string mergedText = string.Join("", Lines); Tokens = new List<AreaToken>(); foreach (string line in Lines) { IList<AreaToken> tokensInThisLine = GetTokensInLine(validTokens, line).ToList(); if (tokensInThisLine.Count == 0) { // No token(s) --> take whole line as one token with nothing else AreaToken areaToken = new AreaToken(line); Tokens.Add(areaToken); } Tokens.AddRange(tokensInThisLine); } }
void ISectionParser.Populate(AreaToken token, Operation operation) { }