Beispiel #1
0
        public string GetStringValue(string fieldName)
        {
            var elementOffset = table.ElementContent.Until(segment => segment.Name == fieldName).Sum(segment => segment.Length);
            var valueAddress  = table.Start + table.ElementLength * arrayIndex + elementOffset;
            var seg           = table.ElementContent.Single(segment => segment.Name == fieldName);

            if (seg.Type == ElementContentType.PCS)
            {
                return(PCSString.Convert(model, valueAddress, seg.Length));
            }
            else if (seg.Type == ElementContentType.Pointer)
            {
                valueAddress = model.ReadPointer(valueAddress);
                var length = PCSString.ReadString(model, valueAddress, true);
                return(PCSString.Convert(model, valueAddress, length));
            }
            else
            {
                throw new NotImplementedException();
            }
        }
        public void SetStringValue(string fieldName, string value)
        {
            var elementOffset = table.ElementContent.Until(segment => segment.Name == fieldName).Sum(segment => segment.Length);
            var valueAddress  = table.Start + table.ElementLength * arrayIndex + elementOffset;
            var seg           = table.ElementContent.Single(segment => segment.Name == fieldName);

            if (seg.Type == ElementContentType.PCS)
            {
                var bytes = model.TextConverter.Convert(value, out var _);
                while (bytes.Count > seg.Length)
                {
                    bytes.RemoveAt(bytes.Count - 1);
                }
                bytes[bytes.Count - 1] = 0xFF;
                while (bytes.Count < seg.Length)
                {
                    bytes.Add(0);
                }
                token.ChangeData(model, valueAddress, bytes);
            }
            else if (seg.Type == ElementContentType.Pointer)
            {
                valueAddress = model.ReadPointer(valueAddress);
                var length = PCSString.ReadString(model, valueAddress, true);
                var bytes  = model.TextConverter.Convert(value, out var _);
                var pcsRun = (PCSRun)model.GetNextRun(valueAddress);
                pcsRun = model.RelocateForExpansion(token, pcsRun, bytes.Count);
                token.ChangeData(model, pcsRun.Start, bytes);
                for (int i = pcsRun.Length; i < length; i++)
                {
                    token.ChangeData(model, pcsRun.Start + i, 0xFF);
                }
            }
            else
            {
                throw new NotImplementedException();
            }
        }