使用FileHelpers库在VB.NET中做一些很棒的事情。使用从文本文件模板构建的动态类解析文件。我找不到的一件事:一种读取单个记录并确定它应该导致生成两个记录的方法 现行守则:
Dim FromType As Type = Dynamic.ClassBuilder.ClassFromSourceFile(MyFilePath,MyDynamicTypeName,NetLanguage.VbNet)
Dim FromRecords()As Object FromRecords = FileHelpers.CommonEngine.ReadString(FromType,MyStringBuilder.ToString)
'...这里可能代码检查某些值
Dim engine As New FileTransformEngine(Of ITransformable(Of MyDestinationClass),MyDestinationClass)
'理想情况下,在下一行中,我希望它能够看到某些条件并能够从单个源代码行生成两条记录。 Dim PayRecords()As Object = engine.TransformRecords(FromRecords)
或者,如果有办法实现“ITransformable(Of ...”TransformTo()并让它返回多个记录,我可以将逻辑放在动态类定义TransformTo()方法中。
思想?
以下是我的源动态类的示例:
导入FileHelpers'永远不要忘记
_ Public NotInheritable Class MyDynamicClass 实现IT可变形(MyDestinationClass) _ 公共名称为字符串
<FieldQuoted(""""c, QuoteMode.OptionalForRead, MultilineMode.AllowForRead)> _
Public KeyType As String
Public Hours As Double
Public Function TransformTo()As MyDestinationClass实现ITransformable(Of MyDestinationClass).TransformTo Dim res为New MyDestinationClass
res.ContactName = Name
' Here is where I would like to say... instead of Return res
If KeyType="ABCD" Then
Dim newRes as New MyDestinationClass
newRes.Contactname = Name + " 2nd contact"
Dim resArray() as MyDestinationClass
redim resArray(1)
resArray(0) = res
resArray(1) = newRes
End If
Return resArray
' Or alternately refer to the engine, but it is not in scope for the dynamic record (is it?). Something like...
engine.AppendToDestination(new MyDestinationClass(...))
结束功能 结束班
答案 0 :(得分:0)
我认为你要遇到的主要问题是ITransformable.TransformTo()被指定返回一个T值。
当您调用engine.TransformRecords()时,会在循环中调用此方法,其中为每个输入记录添加一个输出记录。
如果您不介意使用自己的FileTransformEngine版本,我认为这不会是一个很大的改变,但我没有看到一个干净的方法来实现这一点。