common/Logic/ProductionOrderCore/Vako/VakoParser.cs
2026-04-23 17:50:07 +02:00

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;
}
}
}