public static RouteFindingKnowledgeBase Parse(string data) { var kb = new RouteFindingKnowledgeBase { Actions = new List<AbstractAction>(), States = new List<AbstractState>() }; var split = data.Split('\n'); split = split.Select(s => s.Trim()).ToArray(); foreach (var entry in split) { // skip blank lines if (String.IsNullOrEmpty(entry)) continue; var entrySplit = entry.Split(' '); entrySplit = entrySplit.Select(s => s.Trim()).ToArray(); var sx = int.Parse(entrySplit[0]); var sy = int.Parse(entrySplit[1]); var ex = int.Parse(entrySplit[3]); var ey = int.Parse(entrySplit[4]); var actionName = entrySplit[2]; var startState = kb.GetOrCreateState(sx, sy); var endState = kb.GetOrCreateState(ex, ey); var action = new RouteFindingAction(actionName, startState, endState); kb.Actions.Add(action); } return kb; }