Exemplo n.º 1
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");
            }
        }