CmdReadMetadataTable.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using ExcelDataReader;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Data;
  5. using System.IO;
  6. namespace etoy
  7. {
  8. class CmdReadMetadataTable : Command
  9. {
  10. const string SEARCH_PATTERN = "*.metadata";
  11. ExcelReaderConfiguration _excelReaderConfiguration;
  12. MetadataTableCsvParser _parser = new MetadataTableCsvParser();
  13. public override string Description => "读取Metadata表";
  14. protected override void OnProcess()
  15. {
  16. SetProgress(0.1f);
  17. _excelReaderConfiguration = new ExcelReaderConfiguration() { AutodetectSeparators = new char[] { ',' } };
  18. var metedatas = Directory.GetFiles(Context.Option.CsvOutput, SEARCH_PATTERN, SearchOption.TopDirectoryOnly);
  19. if(metedatas.Length > 0)
  20. {
  21. List<MetadataTable> metadatas = new List<MetadataTable>();
  22. SetProgress(0.4f);
  23. foreach (var metedata in metedatas)
  24. ReadSingle(metedata.ToPath(), metadatas);
  25. SetProgress(0.8f);
  26. Context.Blackboard.MetadataTables = metadatas;
  27. Completed();
  28. }
  29. else
  30. {
  31. SetException(new Exception("找不到Metadata表"));
  32. }
  33. }
  34. void ReadSingle(string file, List<MetadataTable> metadatas)
  35. {
  36. using Stream metadata = new FileStream(file, FileMode.Open, FileAccess.Read);
  37. IExcelDataReader reader = ExcelReaderFactory.CreateCsvReader(metadata, _excelReaderConfiguration);
  38. DataSet dataSet = reader.AsDataSet();
  39. if (dataSet.Tables.Count != 1)
  40. throw new Exception($"Metadata表 Table数量不为1, {file}");
  41. DataTable dt = dataSet.Tables[0];
  42. if (dt == null)
  43. throw new Exception($"Metadata表 DataTable等于空, {file}");
  44. MetadataTable table = _parser.Parser(dt, file);
  45. metadatas.Add(table);
  46. metadata.Close();
  47. reader.Close();
  48. reader.Dispose();
  49. }
  50. }
  51. }