public bool SaveActionMemories(string fileName, ICollection <IActionMemory> actionMemories) { StringBuilder fileContent = new StringBuilder(); foreach (IActionMemory actionMemory in actionMemories) { fileContent.AppendLine(FileActionMemory.Convert(actionMemory)); } System.IO.File.WriteAllText(fileName, fileContent.ToString()); return(true); }
static public IList <IActionMemory> Parse(IList <string> lines, ICollection <IActionMemory> actionMemories) { _fileActionMemories.Clear(); if (actionMemories != null) { foreach (var actionMemory in actionMemories) { if (!(actionMemory is FileActionMemory fileActionMemory)) { fileActionMemory = new FileActionMemory(actionMemory); } _fileActionMemories.Add(fileActionMemory); } } return(Parse(lines)); }
public ICollection <IActionMemory> LoadActionMemories(string fileName, ICollection <IActionMemory> actionMemories = null) { List <IActionMemory> result = new List <IActionMemory>(); List <string> lines = new List <string>(); System.IO.StreamReader file = new System.IO.StreamReader(fileName); string line; while ((line = file.ReadLine()) != null) { lines.Add(line); } file.Close(); result.AddRange(FileActionMemory.Parse(lines, actionMemories)); return(result); }
static public IList <IActionMemory> Parse(IList <string> lines) { if (lines == null) { return(null); } IList <IActionMemory> result = new List <IActionMemory>(); IPuzzleAction action = null; FileActionMemory fileActionMemory = null; int parseType = 0; FieldOfVisionTypes fieldOfVision = FieldOfVisionTypes.Single; foreach (var line in lines) { if (line.StartsWith(IdentifierIPuzzleAction)) { action = PuzzleAction.Parse(line.Substring(IdentifierIPuzzleAction.Length)); fileActionMemory = _fileActionMemories.Where(e => e.Action.Equals(action))?.FirstOrDefault(); if (fileActionMemory == null) { fileActionMemory = new FileActionMemory(action); _fileActionMemories.Add(fileActionMemory); } result.Add(fileActionMemory); continue; } if (fileActionMemory == null) { continue; } if (line.StartsWith(IdentifierDifferenceCount)) { fileActionMemory.DifferenceCount += int.Parse(line.Substring(IdentifierDifferenceCount.Length)); } else if (line.StartsWith(IdentifierNoDifferenceCount)) { fileActionMemory.NoDifferenceCount += int.Parse(line.Substring(IdentifierNoDifferenceCount.Length)); } else if (line.StartsWith(IdentifierPositiveFeedbackCount)) { fileActionMemory.PositiveFeedbackCount += int.Parse(line.Substring(IdentifierPositiveFeedbackCount.Length)); } else if (line.StartsWith(IdentifierNegativeFeedbackCount)) { fileActionMemory.NegativeFeedbackCount += int.Parse(line.Substring(IdentifierNegativeFeedbackCount.Length)); } else if (line.StartsWith(IdentifierDifferentUnits)) { parseType = 1; } else if (line.StartsWith(IdentifierNoDifferentUnits)) { parseType = 2; } else if (line.StartsWith(IdentifierNGetNoDifferencePattern)) { fieldOfVision = (FieldOfVisionTypes)Enum.Parse(typeof(FieldOfVisionTypes), line.Substring(IdentifierNGetNoDifferencePattern.Length)); parseType = 3; } else if (line.StartsWith(IdentifierPositveDictPartialSnapshotCompressions)) { parseType = 4; } else if (line.StartsWith(IdentifierNegativeDictPartialSnapshotCompressions)) { parseType = 5; } else { var splitedLine = line.Split(new[] { '\t' }); if (splitedLine.Length < 4) { continue; } switch (parseType) { case 1: // DifferentUnits ISensoryUnit differentUnit = SensoryUnit.Parse(splitedLine[2]); int differentUnitCount = int.Parse(splitedLine[3]); if (!fileActionMemory.DifferentUnits.ContainsKey(differentUnit)) { fileActionMemory.DifferentUnits.Add(differentUnit, 0); } fileActionMemory.DifferentUnits[differentUnit] += differentUnitCount; break; case 2: // NoDifferentUnits ISensoryUnit noDifferentUnit = SensoryUnit.Parse(splitedLine[2]); int noDifferentUnitCount = int.Parse(splitedLine[3]); if (!fileActionMemory.NoDifferentUnits.ContainsKey(noDifferentUnit)) { fileActionMemory.NoDifferentUnits.Add(noDifferentUnit, 0); } fileActionMemory.NoDifferentUnits[noDifferentUnit] += noDifferentUnitCount; break; case 3: // DifferentUnits Dictionary <ISensoryPattern, int> dictionarySensoryPatternCount = fileActionMemory.GetNoDifferencePattern(fieldOfVision); ISensoryPattern noDifferentPattern = SensoryPattern.Parse(splitedLine[2]); int noDifferentPatternCount = int.Parse(splitedLine[3]); if (!dictionarySensoryPatternCount.ContainsKey(noDifferentPattern)) { dictionarySensoryPatternCount.Add(noDifferentPattern, 0); } dictionarySensoryPatternCount[noDifferentPattern] += noDifferentPatternCount; break; case 4: // PositveDictPartialSnapshotCompressions IPartialSnapshotCompression positveDictPartialSnapshotCompression = PartialSnapshotCompression.Parse(splitedLine[2]); FeedbackCounter positiveFeedback = FeedbackCounter.Parse(splitedLine[3]) as FeedbackCounter; if (!fileActionMemory.PositveDictPartialSnapshotCompressions.ContainsKey(positveDictPartialSnapshotCompression)) { fileActionMemory.PositveDictPartialSnapshotCompressions.Add(positveDictPartialSnapshotCompression, new FeedbackCounter(0, 0)); } positiveFeedback += fileActionMemory.PositveDictPartialSnapshotCompressions[positveDictPartialSnapshotCompression] as FeedbackCounter; fileActionMemory.PositveDictPartialSnapshotCompressions[positveDictPartialSnapshotCompression] = positiveFeedback; break; case 5: // NegativeDictPartialSnapshotCompressions IPartialSnapshotCompression negativeDictPartialSnapshotCompression = PartialSnapshotCompression.Parse(splitedLine[2]); FeedbackCounter negativeFeedback = FeedbackCounter.Parse(splitedLine[3]) as FeedbackCounter; if (!fileActionMemory.NegativeDictPartialSnapshotCompressions.ContainsKey(negativeDictPartialSnapshotCompression)) { fileActionMemory.NegativeDictPartialSnapshotCompressions.Add(negativeDictPartialSnapshotCompression, new FeedbackCounter(0, 0)); } negativeFeedback += fileActionMemory.NegativeDictPartialSnapshotCompressions[negativeDictPartialSnapshotCompression] as FeedbackCounter; fileActionMemory.NegativeDictPartialSnapshotCompressions[negativeDictPartialSnapshotCompression] = negativeFeedback; break; } } } return(result); }