我有一个要处理的CSV文件,有多种记录类型。每行的第一列告诉我它是哪种类型的数据。我为每一行编写了一个数据类(超过30个),我可以为每个数据类编写一个构造函数,它接受来自解析器的Array [String],因为这些记录最多有35个字段是错误的容易和凌乱。
由于有多种记录类型,显然没有第一行带有字段名称。
我正在使用Scala 2.11,所以我想到了如何使用反射,而不是使用底层的Java反射,我当然可以直接使用Scala反射,但我很难理解如何。
所以我需要做的是: -
现在这依赖于保持相同顺序的字段,Scala能保证吗?
此外,我发现了许多示例,说明如何查找类的字段,但我还没有找到如何获取和设置字段的值。有人可以指出我正确的方向吗?
以下是前两条记录: -
990001,DD002,1995,20150723,143937,O,NMR,Impel Pro,1998v1.00,,,NMR,1998v2.00
091017,1,HOLSTEIN,HF,D ,N,12,99,280,999,305,1,0.1,3,75,99.9,1.5,1.5,7,7,1,1,7,7,0,0,9,9,22000,25000,29000,32000,15,65,1,1047,Y,Y,C
第一个记录是标题,第二个记录是牛的品种,在这种情况下是荷斯坦牛。 990001表示标题,在我的代码中表示为Header对象,091017表示品种,表示为品种对象。
我想将标题加载到: -
class Header(var dataDictionaryType: String = "",
var isoVersion: String = "",
var createdOrUploadedDate: Option[LocalDate] = Some(null),
var createdOrUploadedTime: Option[LocalTime] = Some(null),
var systemStatus: String = "",
var senderName: String = "",
var receiverName: String = "",
var adedNationalVersion:String = "",
var processComputerType: String = "",
var adedManufacturerVersion: String = ""
请注意,需要添加一些额外的选项。