59 lines
2.0 KiB
C#
59 lines
2.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace Xylem.Common.Logic.ProductionOrderCore.Vako
|
|
{
|
|
/// <summary>
|
|
/// VAKO decoder
|
|
/// </summary>
|
|
public static class VakoParser
|
|
{
|
|
/// <summary>
|
|
/// Parser of VAKO code
|
|
/// </summary>
|
|
/// <param name="rawVako"></param>
|
|
/// <param name="vakoMaps"></param>
|
|
/// <returns></returns>
|
|
public static VakoData Parse(RawVako rawVako, List<VakoMap> vakoMaps)
|
|
{
|
|
var ret = new VakoData
|
|
{
|
|
KeyValues = new List<VakoKeyValue>()
|
|
};
|
|
|
|
//var d = vakoMaps.GroupBy(g => new Tuple<Int32, Int32>(g.Stelle, g.Laenge));
|
|
//d = 99
|
|
foreach (var checkVakoIsMatching in vakoMaps.GroupBy(g => new Tuple<Int32, Int32>(g.Stelle, g.Laenge)))
|
|
{
|
|
var actualStart = checkVakoIsMatching.Key.Item1 - 1;
|
|
var actualLength = checkVakoIsMatching.Key.Item2;
|
|
var actualChars = rawVako.VakoString.Substring(actualStart, actualLength);
|
|
|
|
var matches = checkVakoIsMatching.Where(c => c.Charcode == actualChars);
|
|
// ReSharper disable once PossibleMultipleEnumeration
|
|
if (!matches.Any())
|
|
{
|
|
//no match warning!
|
|
}
|
|
// ReSharper disable once PossibleMultipleEnumeration
|
|
if (matches.Count() == 1)
|
|
{
|
|
// ReSharper disable once PossibleMultipleEnumeration
|
|
var match = matches.First();
|
|
ret.KeyValues.Add(new VakoKeyValue
|
|
{
|
|
Desc = match.Bemerkung,
|
|
Key = match.Schluessel,
|
|
Name = match.Name,
|
|
Charcode = match.Charcode,
|
|
Value = match.Wert,
|
|
});
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
}
|
|
}
|