Beispiel #1
0
        public static FluentFixedEngine Build(string json)
        {
            dynamic deserializedBuilderInfo = JObject.Parse(json);

            var descriptor = new FixedRecordDescriptor();

            if (deserializedBuilderInfo.FixedMode != null)
            {
                descriptor.FixedMode = (FixedMode)deserializedBuilderInfo.FixedMode.Value;
            }

            if (deserializedBuilderInfo.IgnoreEmptyLines != null)
            {
                descriptor.IgnoreEmptyLines = deserializedBuilderInfo.IgnoreEmptyLines.Value;
            }

            if (deserializedBuilderInfo.Fields != null)
            {
                foreach (dynamic fieldInfo in deserializedBuilderInfo.Fields)
                {
                    if (fieldInfo.Name == null || fieldInfo.Value == null)
                    {
                        continue;
                    }
                    if (fieldInfo.Value.IsArray != null && (bool)fieldInfo.Value.IsArray.Value)
                    {
                        CreateArray(descriptor, fieldInfo);
                        continue;
                    }
                    CreateField(descriptor, fieldInfo);
                }
            }

            return(descriptor.Build());
        }
        public void Read_With_Null()
        {
            var descriptor = new FixedRecordDescriptor();

            descriptor.AddField("Name")
            .SetLength(5)
            .SetTrimMode(TrimMode.Both);

            descriptor.AddField("MiddleName")
            .SetLength(5);

            descriptor.AddField("LastName")
            .SetLength(5);

            var engine = descriptor.Build();


            var items = engine.ReadFile(@"C:\tmp\Message.txt");

            Assert.AreEqual(1, items.Length);

            dynamic item = items[0];

            Assert.AreEqual(null, item.MiddleName);
        }
        public void Serialize_Descriptor()
        {
            var descriptor = new FixedRecordDescriptor();

            descriptor.AddField("Function")
            .SetLength(3)
            .SetAlignMode(AlignMode.Right)
            .SetType(typeof(int))
            .SetAlignChar('0');

            descriptor.AddField("ArraySize")
            .SetLength(4)
            .SetAlignMode(AlignMode.Left)
            .SetAlignChar('0')
            .SetConverter(typeof(IntegerConverter));

            var arrayDescriptor = descriptor.AddArray("ArrayData")
                                  .SetArrayLength(500)
                                  .SetArrayItemLength(10)
                                  .SetAlign(false);

            arrayDescriptor.AddField("DealId")
            .SetLength(10)
            .SetNullValue(string.Empty)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar('0');

            var jsonDescriptor = descriptor.Build().Serialize();
        }
        public void Deserialize_Descriptor()
        {
            var descriptor = new FixedRecordDescriptor();

            descriptor.AddField("Function")
            .SetLength(3)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar('0');

            descriptor.AddField("ArraySize")
            .SetLength(4)
            .SetAlignMode(AlignMode.Left)
            .SetAlignChar('0')
            .SetConverter(typeof(IntegerConverter));

            var arrayDescriptor = descriptor.AddArray("ArrayData")
                                  .SetArrayLength(500)
                                  .SetArrayItemLength(10)
                                  .SetAlign(false);

            arrayDescriptor.AddField("DealId")
            .SetLength(10)
            .SetNullValue(string.Empty)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar('0');

            var engineToSerialize = descriptor.Build();

            var jsonDescriptor = engineToSerialize.Serialize();

            var engine = FluentFixedEngine.Build(jsonDescriptor);

            ExpandoObject item = new ExpandoObject();

            item.TryAdd("Function", "001");
            item.TryAdd("ArraySize", 25);

            List <ExpandoObject> arrayData = new List <ExpandoObject>();

            for (int i = 0; i < 25; i++)
            {
                ExpandoObject arrayItem = new ExpandoObject();
                arrayItem.TryAdd("DealId", "STOCKASC" + i.ToString().PadLeft(2, '0'));
                arrayData.Add(arrayItem);
            }

            item.TryAdd("ArrayData", arrayData);

            string content = engine.WriteString(new[] { item });

            Assert.AreEqual("0010025STOCKASC00STOCKASC01STOCKASC02STOCKASC03STOCKASC04STOCKASC05STOCKASC06STOCKASC07STOCKASC08STOCKASC09STOCKASC10STOCKASC11STOCKASC12STOCKASC13STOCKASC14STOCKASC15STOCKASC16STOCKASC17STOCKASC18STOCKASC19STOCKASC20STOCKASC21STOCKASC22STOCKASC23STOCKASC24" + Environment.NewLine, content);
        }
Beispiel #5
0
        public void Read_Multi_Array()
        {
            var descriptor = new FixedRecordDescriptor();

            descriptor.AddField("MessageAction")
            .SetLength(32)
            .SetTrimMode(TrimMode.Right);

            descriptor.AddField("NUMPARAM")
            .SetLength(9)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar('0')
            .SetType(typeof(int))
            .SetTrimMode(TrimMode.Both);

            descriptor.AddField("TPCONTR")
            .SetLength(1)
            .SetTrimMode(TrimMode.None)
            ;

            descriptor.AddField("TPPARM")
            .SetLength(1)
            .SetTrimMode(TrimMode.None)
            ;
            descriptor.AddField("TPCHASSI")
            .SetLength(1)
            .SetTrimMode(TrimMode.None)
            ;
            descriptor.AddField("NUMCDB")
            .SetLength(10)
            .SetTrimMode(TrimMode.Both);

            descriptor.AddField("TPBONUS")
            .SetLength(1)
            .SetTrimMode(TrimMode.None)
            ;

            descriptor.AddField("NUMCONTRINI")
            .SetLength(9)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar('0')
            .SetType(typeof(int))
            .SetTrimMode(TrimMode.Both);

            descriptor.AddField("NUMCONTRFIM")
            .SetLength(9)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar('0')
            .SetType(typeof(int))
            .SetTrimMode(TrimMode.Both);

            descriptor.AddField("TXTDESCRICAO")
            .SetLength(80)
            .SetTrimMode(TrimMode.Right);

            var accountingEventDescriptor = descriptor.AddArray("AccountingEvent")
                                            .SetAlign(true)
                                            .SetAlignChar(' ')
                                            .SetArrayLength(5590)
                                            .SetArrayItemLength(1118);

            accountingEventDescriptor.AddField("NUMPARAM")
            .SetLength(9)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar('0')
            .SetType(typeof(int))
            .SetTrimMode(TrimMode.Both);

            accountingEventDescriptor.AddField("NUMEVENT")
            .SetLength(9)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar('0')
            .SetType(typeof(int))
            .SetTrimMode(TrimMode.Both);

            accountingEventDescriptor.AddField("TXTDESCRICAO")
            .SetLength(80)
            .SetTrimMode(TrimMode.Right);

            var accountingDataDescriptor = accountingEventDescriptor.AddSubArray("AccountingData")
                                           .SetAlign(true)
                                           .SetAlignChar(' ')
                                           .SetArrayLength(1020)
                                           .SetArrayItemLength(102);

            accountingDataDescriptor.AddField("NUMPARAM")
            .SetLength(9)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar('0')
            .SetType(typeof(int))
            .SetTrimMode(TrimMode.Both);

            accountingDataDescriptor.AddField("NUMEVENT")
            .SetLength(9)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar('0')
            .SetType(typeof(int))
            .SetTrimMode(TrimMode.Both);

            accountingDataDescriptor.AddField("CODTIPO")
            .SetLength(2)
            .SetTrimMode(TrimMode.None);

            accountingDataDescriptor.AddField("NUMSEQ")
            .SetLength(4)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar('0')
            .SetType(typeof(int))
            .SetTrimMode(TrimMode.Both);

            accountingDataDescriptor.AddField("DESCCONTA")
            .SetLength(10)
            .SetTrimMode(TrimMode.Right);

            accountingDataDescriptor.AddField("DESCCENTRO")
            .SetLength(10)
            .SetTrimMode(TrimMode.Right);

            accountingDataDescriptor.AddField("VLRPERCEN")
            .SetLength(5)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar(' ')
            .SetConverterFormat("N2")
            .SetConverter(typeof(DecimalConverter))
            .SetTrimMode(TrimMode.Both);

            accountingDataDescriptor.AddField("CODLCTO")
            .SetLength(2)
            .SetTrimMode(TrimMode.None);

            accountingDataDescriptor.AddField("CODCOPA")
            .SetLength(1)
            .SetTrimMode(TrimMode.None);

            accountingDataDescriptor.AddField("TXTDESCRICAO")
            .SetLength(50)
            .SetTrimMode(TrimMode.Right);

            var engine = descriptor.Build();

            var items = engine.ReadString("LOAD                            000000001PRC0000000000 000000000000000000SETUP PADRÃO - REGRA DEFAULT                                                    000000001000000001Evento default                                                                  000000001000000001CR0001244044    2PPM      09450  NPARCELA PM - SET UP PADRÃO                        000000001000000001CR0002244048    2PPM      00200  NPM  SET UP PADRÃO - FUNDO DE CONTINGENCIA         000000001000000001CR0003244049    2PPM      00250  NPM SET UP PADRÃO - TX ADMINISTRATIVA              000000001000000001CR0004244050    2PPM      00100  NPM SET UP PADRÃO - FIGHTING FUND                  000000001000000001DB0001PARMA     2PPM      10000  NPARCELA PM SET UP PADRÃO                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ");
        }