public Entity ParseEntity(DataBlock dataBlock, string entity, string parent) { var e = new Entity(); e.rootPath = rootPath; // construye el encabezado esperable var block = dataBlock.makeStringBlock(entity); var blockParent = dataBlock.makeStringBlock(parent); byte[] full; if (parent != "") full = dataBlock.addArrays(block, block, blockParent); else full = dataBlock.addArrays(block, blockParent); if (dataBlock.moveTo(full) == false) throw new Exception("Sequence not found."); // lee la entidad e.Name = dataBlock.eatShortString(); e.RelationChild = dataBlock.eatShortString(); if (e.RelationChild != "") e.RelationParent = dataBlock.eatShortString(); e.Description = dataBlock.eatShortString(); e.IndexFilename = dataBlock.eatShortString(); e.s1 = dataBlock.eat16int(); if (e.IndexFilename != "") { e.CodesVariable = dataBlock.eatShortString(); e.LabelVariable = dataBlock.eatShortString(); e.Level = dataBlock.eat32int(); e.b1 = dataBlock.eatByte(); //e.VariableCount = no es confiable...que guarde rangos... eat32int(); // en base al count de variables, que busque los "dataset" while (true) { Variable v = ParseVariable(dataBlock, e); if (v != null) e.Variables.Add(v); else break; } } e.VariableCount = e.Variables.Count; return e; }
private int ParseBeginning(DataBlock dataBlock, string entity, string parent) { var e = new Entity(); e.rootPath = rootPath; // construye el encabezado esperable var block = dataBlock.makeStringBlock(entity); var blockParent = dataBlock.makeStringBlock(parent); byte[] full; if (parent != "") full = dataBlock.addArrays(block, block, blockParent); else full = dataBlock.addArrays(block, blockParent); if (dataBlock.moveTo(full) == false) throw new Exception("Sequence not found."); return dataBlock.n; }
private void TryEntities(DataBlock dataBlock, string parent, List<Entity> entitiesNames) { // lee el length string entityNameString; if (dataBlock.PlausibleString(out entityNameString) == false || entityNameString == "") return; // if (checkEntityStart(dataBlock) == false) return; Entity entity = new Entity() { Name = entityNameString }; entitiesNames.Add(entity); // ahora se va a buscar a sus hijos var block = dataBlock.makeStringBlock(entityNameString); List<Entity> variants = new List<Entity>(); List<int> allBlockOccurrences = dataBlock.GetAllMatches(block); foreach (int startN in allBlockOccurrences) { dataBlock.n = startN; ProcessOcurrence(dataBlock, variants, entity.Children); } if (variants.Count > 0) { entity.Children.Clear(); entity.Children.AddRange(variants); } }