2012-01-10 18 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

相關問題