Exemplo n.º 1
0
        public static void AssertEquals(SerializableEntityTable t1, SerializableEntityTable t2)
        {
            Assert.AreEqual(t1.Name, t2.Name);
            Assert.AreEqual(t1.IndexColumns.Count, t2.IndexColumns.Count);
            for (var i = 0; i < t1.IndexColumns.Count; ++i)
            {
                AssertEquals(t1.IndexColumns[i], t2.IndexColumns[i]);
            }
            Assert.AreEqual(t1.NumericColumns.Count, t2.NumericColumns.Count);
            for (var i = 0; i < t1.NumericColumns.Count; ++i)
            {
                AssertEquals(t1.NumericColumns[i], t2.NumericColumns[i]);
            }
            Assert.AreEqual(t1.StringColumns.Count, t2.StringColumns.Count);
            for (var i = 0; i < t1.StringColumns.Count; ++i)
            {
                AssertEquals(t1.StringColumns[i], t2.StringColumns[i]);
            }

            Assert.AreEqual(t1.Properties.Length, t2.Properties.Length);

            /* Can't expect the numerical values to be precise, because of non-determinism of parallelism when generating string table.
             * for (var i=0; i < t1.Properties.Length; ++i)
             * {
             *  var p1 = t1.Properties[i];
             *  var p2 = t2.Properties[i];
             *  Assert.AreEqual(p1.EntityId, p2.EntityId);
             *  Assert.AreEqual(p1.Name, p2.Name);
             *  Assert.AreEqual(p1.Value, p2.Value);
             * }
             */
        }
Exemplo n.º 2
0
        public static void ExportEntityTable(INamedBuffer buffer, string entityFolder, string[] strings)
        {
            var buffers  = buffer.Unpack();
            var baseName = Util.ToValidFileName(buffer.Name);
            var fileName = Path.Combine(entityFolder, baseName + ".csv");

            var et = new SerializableEntityTable();

            foreach (var b in buffers)
            {
                if (b.Name.StartsWith(VimConstants.IndexColumnNamePrefix))
                {
                    et.IndexColumns.Add(b.StripPrefix().ToTypedBuffer <int>());
                }
                else if (b.Name.StartsWith(VimConstants.NumberColumnNamePrefix))
                {
                    et.NumericColumns.Add(b.StripPrefix().ToTypedBuffer <double>());
                }
                else if (b.Name.StartsWith(VimConstants.StringColumnNamePrefix))
                {
                    et.StringColumns.Add(b.StripPrefix().ToTypedBuffer <int>());
                }
                else if (b.Name == VimConstants.PropertiesBufferName)
                {
                    et.Properties = b.AsSpan <SerializableProperty>().ToArray();
                }
                else
                {
                    throw new Exception($"{b.Name} is not a recognized entity table buffer");
                }
            }

            var numRows = et.GetNumRows();
            var rows    = Enumerable
                          .Range(0, numRows)
                          .Select(row => et.GetEntityTableRowValues(row, strings))
                          .Prepend(et.GetColumnNames());

            File.WriteAllLines(fileName, rows.Select(CsvUtil.ToCsvRow));

            if (et.Properties.Length > 0)
            {
                var d = new Dictionary <int, Dictionary <string, string> >();
                foreach (var p in et.Properties)
                {
                    if (!d.ContainsKey(p.EntityIndex))
                    {
                        d.Add(p.EntityIndex, new Dictionary <string, string>());
                    }
                    var key = p.Name >= 0 ? strings[p.Name] : "";
                    var val = p.Value >= 0 ? strings[p.Value] : "";
                    d[p.EntityIndex].AddOrReplace(key, val);
                }
                JsonUtil.ToJsonFile(d, Path.Combine(entityFolder, baseName) + ".json");
            }
        }
Exemplo n.º 3
0
 public static IEnumerable <string> GetColumnNames(this SerializableEntityTable et)
 {
     foreach (var col in et.NumericColumns)
     {
         yield return(col.Name);
     }
     foreach (var col in et.StringColumns)
     {
         yield return(col.Name);
     }
     foreach (var col in et.IndexColumns)
     {
         yield return(col.Name);
     }
 }
Exemplo n.º 4
0
 public static IEnumerable <string> GetEntityTableRowValues(this SerializableEntityTable et, int n, string[] strings)
 {
     foreach (var col in et.NumericColumns)
     {
         yield return(col.Data[n].ToString());
     }
     foreach (var col in et.StringColumns)
     {
         yield return(col.Data[n] >= 0 ? strings[col.Data[n]] : "");
     }
     foreach (var col in et.IndexColumns)
     {
         yield return(col.Data[n].ToString());
     }
 }