12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- using ExcelDataReader;
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.IO;
- namespace etoy
- {
- class CmdReadMetadataTable : Command
- {
- const string SEARCH_PATTERN = "*.metadata";
- ExcelReaderConfiguration _excelReaderConfiguration;
- MetadataTableCsvParser _parser = new MetadataTableCsvParser();
- public override string Description => "读取Metadata表";
- protected override void OnProcess()
- {
- SetProgress(0.1f);
- _excelReaderConfiguration = new ExcelReaderConfiguration() { AutodetectSeparators = new char[] { ',' } };
- var metedatas = Directory.GetFiles(Context.Option.CsvOutput, SEARCH_PATTERN, SearchOption.TopDirectoryOnly);
- if(metedatas.Length > 0)
- {
- List<MetadataTable> metadatas = new List<MetadataTable>();
- SetProgress(0.4f);
- foreach (var metedata in metedatas)
- ReadSingle(metedata.ToPath(), metadatas);
- SetProgress(0.8f);
- Context.Blackboard.MetadataTables = metadatas;
- Completed();
- }
- else
- {
- SetException(new Exception("找不到Metadata表"));
- }
- }
- void ReadSingle(string file, List<MetadataTable> metadatas)
- {
- using Stream metadata = new FileStream(file, FileMode.Open, FileAccess.Read);
- IExcelDataReader reader = ExcelReaderFactory.CreateCsvReader(metadata, _excelReaderConfiguration);
- DataSet dataSet = reader.AsDataSet();
- if (dataSet.Tables.Count != 1)
- throw new Exception($"Metadata表 Table数量不为1, {file}");
- DataTable dt = dataSet.Tables[0];
- if (dt == null)
- throw new Exception($"Metadata表 DataTable等于空, {file}");
- MetadataTable table = _parser.Parser(dt, file);
- metadatas.Add(table);
- metadata.Close();
- reader.Close();
- reader.Dispose();
- }
- }
- }
|