我正在寻找一种将平面数据转换为数据结构的方法。此转换的输入不是同质的。某些数据包含太多信息,其他数据包含需要处理的信息。
让我举个例子来解释一下。假设我有一些带有汽车数据的Excel文件。这些文件包含有关汽车及其引擎的信息。
文件1:
Name | Type | EngineId | Manufacturer | Power (hp) | Torque Opel | Adam | I4 | Opel | 69 | 115
文件2:
Brand | Type | Engine | Power (kW) | Manufacturer Fiat | Punto | 1.2-L | 44 | Chrysler
如您所见,文件略有不同:第一列的名称和品牌,电源的不同测量单位,制造商位于不同的位置,文件2中缺少扭矩。
我想将其转换为:
public class Car {
string Name;
string Type;
Engine Engine;
}
public class Engine {
string Id;
string Manufacturer;
double Power;
Dictionary<string,string> OtherAttributes;
}
我认为转换也需要转换规则的类:
public class MappingRules {
string FileType; // File 1 vs File 2
List<MappingRule> MappingRules;
}
public class MappingRule<T> {
string SourceColumnName;
string Target;
ITranslate<T> Translator;
}
interface ITranslate<T> {
T Convert(T sourceValue);
}
我的问题是:我怎样才能做到这一点,但更重要的是:我该如何研究这个?
更新
我最终选择了一种方法,其中目标结构是硬编码的(即Car
和Engine
类)。用户得到了一个工具,根据文件类型,他将列映射到这些类的属性。然后,翻译器将列中的值转换为类中的属性。
答案 0 :(得分:3)
我或多或少地这样做:
您的转换规则&#34;想法是在设计的那一部分之外的东西,因为它是转换函数的细节&#39;的实施方式。
答案 1 :(得分:1)
你做得对。对于每个文件,您需要定义它如何转换为您的对象。如果每个文件彼此独立,则可以按任何顺序转换它们。如果缺少字段,则需要定义它们应该获得的值。
如果您想直接从java进行操作,请查看 apache-POI 库,或将其导出为CSV进行处理。
更广泛的方法是将其转换为XML,以便任何工具都知道如何使用某些XSL转换来处理它。
答案 2 :(得分:0)
我建议使用XML,XSL&amp; JAXB通过以下方式实现此目的 -