2012-01-10 17 views
0

我正在获取具有不同列数的多个输出表的数据的文件。单输入文件中的多个输出数据表的记录

第一列将决定记录应该到的表格。

head1|abc|123|sklj|sad 
head2|klj|lkj|323|323 
tab1|one|two|three|four|five 
tab2|one|two|three 
tab2|one|two|three 
tab3|one|two|three|four 

如上所示,head指定标题。所以前两行是标题记录。

tab1指定表1,其中有五列。因此,所有以tab1开头的记录都应该加载到table1中。

tab2指定表2,其具有三列。因此,所有以tab2开头的记录都应该加载到table2中。

tab3指定表3,其具有四列。所以所有以tab3开头的记录都应该加载到table3中。

如何实现这种情况?

是否有任何示例可用于相同的场景?

感谢您的阅读!

+0

什么这让同春做了预批/脚本拆分文件中3(或更多)的文件?只需将其分割并将其映射到所需的表格即可。 – 2012-01-10 07:06:37

回答

0

一个简单的弹簧批次解决方案可能是:

  • 为每个目标表,例如一个抽象父类“targetTab”和特定的类域模型TargetTab1延伸TargetTab
  • 读取器,其读取行作为列表/地图
  • (映射选项1)的自定义FieldSetMapper它决定于在列表/地图第一条目的目标表,并创建一个特定targetTab对象实现,例如targetTab1
  • (映射选项2)处理器做上述相同FieldSetMapper
  • 作家接受TargetTab
  • 同一作者检查键入类型的所有对象,并决定哪一个真正的作家(简单的DAO实现)应该用于

一个更具扩展性的解决方案可能会引入根据目标表和不同批次各类型

+0

感谢您的投入迈克尔! PatternMatchingCompositeLineTokenizer在这种情况下不会有任何帮助吗?如果没有,那么将通过预分批脚本方法去分割文件..看起来更简单! – Nik 2012-01-11 08:02:02

+0

对于你的示例行格式PatternMatchingCompositeLineTokenizer似乎是矫枉过正,如果你坚持我会提出一个特定的FieldSetMapper实现,其行为与我的答案中的处理器相同(决定了一个简单的DelimitedLineTokenizer(带分隔符:|)和PassThroughFieldSetMapper就足够了根据线内容映射目标),但是再次不需要PatternMatching – 2012-01-11 09:46:29

+0

谢谢Michael!你可以看看我在文件开头添加列名的问题!我将七列输出为文件。我想要包含列名称! – Nik 2012-01-11 12:03:18

相关问题