- enahcedstringevaluate.zip
- EnahcedStringEvaluate
- EhancedStringEvalute.sln
- EhancedStringEvalute.suo
- EnhancedStringEvaluate
- EvaluateTest
- bin
- Debug
- EnhancedStringEvaluate.dll
- EnhancedStringEvaluate.pdb
- EvaluateSampleTest.dll
- EvaluateSampleTest.pdb
- EvaluateTest.dll
- EvaluateTest.pdb
- TestEvaluation.exe
- TestEvaluation.pdb
- EnhancedStringEvaluateTest.cs
- EvaluateSampleTest.csproj
- EvaluateSampleTest.csproj.vs10x
- EvaluateTest.csproj.vs10x
- Properties
- TestEvaluate
- Enhanced String Handling.pdf
- ehancedstringevalute.zip
- EhancedStringEvalute.sln
- EhancedStringEvalute.suo
- EnhancedStringEvaluate
- EvaluateTest
- bin
- Debug
- EnhancedStringEvaluate.dll
- EnhancedStringEvaluate.pdb
- EvaluateSampleTest.dll
- EvaluateSampleTest.pdb
- EvaluateTest.dll
- EvaluateTest.pdb
- TestEvaluation.exe
- TestEvaluation.pdb
- EnhancedStringEvaluateTest.cs
- EvaluateSampleTest.csproj
- EvaluateSampleTest.csproj.vs10x
- EvaluateTest.csproj.vs10x
- obj
- Debug
- Properties
- TestEvaluate
- TestResults
- Avi Farah_TEST-PC 2010-08-21 00_24_34.trx
- Avi Farah_TEST-PC 2010-08-21 00_27_42.trx
- Avi Farah_TEST-PC 2010-09-13 14_37_39.trx
- Avi Farah_TEST-PC 2010-09-13 14_38_10.trx
- Avi Farah_TEST-PC 2010-09-13 14_39_19.trx
- Avi Farah_TEST-PC 2010-09-13 14_39_49.trx
- Avi Farah_TEST-PC 2010-09-13 14_42_18.trx
- Avi Farah_TEST-PC 2010-09-13 14_49_58.trx
- Avi Farah_TEST-PC 2010-09-24 01_46_50.trx
- Avi Farah_TEST-PC 2010-09-24 01_48_16.trx
- Avi Farah_TEST-PC 2010-10-23 20_55_40.trx
- Avi Farah_TEST-PC 2010-11-19 19_40_15.trx
- Avi Farah_TEST-PC 2010-11-19 19_40_15
- In
- Out
|
using System;
using System.Collections.Generic;
using EnhancedStringEvaluate;
using System.Text.RegularExpressions;
namespace TestEvaluation.ProcessEvaluate
{
/// <summary>
/// Purpose:
/// Similar to a calculator memory, a value may be stored and retrieved.
///
/// Format:
/// (Delimiters are displayed as "{" and "}" but the system will be able to
/// handle any delimiter.)
/// {Memory::Name::Value} -- Store Value into Name storage
/// {Memory::Name} -- Retrieve from Name storage
/// </summary>
public class ProcessMemory : IProcessEvaluate
{
/// <summary>Expression identifying the memory</summary>
private Regex _reMemory;
/// <summary>Identifying the delimiters</summary>
private readonly IDelimitersAndSeparator _delim;
/// <summary>Keep track of all the memory stores</summary>
private Dictionary<string, string> _memories;
public ProcessMemory() : this(DelimitersAndSeparator.DefaultDelimitedString) {}
public ProcessMemory(IDelimitersAndSeparator delim)
{
_delim = delim;
_memories = new Dictionary<string, string>();
RegexOptions reo = RegexOptions.IgnoreCase | RegexOptions.Singleline;
//string pattern = @"({)Memory::(?<name>:?(([^{}:]+)(:[^{}:]*)?)*)(::(?<value>[^{}]*)?)?(})";
string pattern = string.Format(@"({0})Memory::(?<name>:?(([^{0}{1}:]+)(:[^{0}{1}:]*)?)*)(::(?<value>[^{0}{1}]*)?)?({1})",
_delim.OpenDelimEquivalent, _delim.CloseDelimEquivalent);
_reMemory = new Regex(pattern, reo);
}
#region IProcessEvaluate Members
public void Evaluate(object src, EnhancedStringEventArgs ea)
{
// Initialize return code
ea.IsHandled = false;
string text = ea.EhancedPairElem.Value;
if (string.IsNullOrWhiteSpace(text)) return;
bool rc = _reMemory.IsMatch(text);
if (!rc) return;
string replacement = _reMemory.Replace(text, MemoryReplace);
if (replacement == text) return;
// Announce that expression was successfully handled
ea.IsHandled = true;
// Keep new value
ea.EhancedPairElem.Value = replacement;
return;
}
#endregion
private string MemoryReplace(Match m)
{
string name = m.Groups["name"].Value;
if (string.IsNullOrWhiteSpace(name))
return m.ToString();
string value = m.Groups["value"].Value;
if (string.IsNullOrWhiteSpace(value))
{
if (_memories.ContainsKey(name))
return _memories[name];
_memories.Add(name, string.Empty);
return string.Empty;
}
if (_memories.ContainsKey(name))
_memories[name] = value;
else
_memories.Add(name, value);
return value;
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.