2014-10-17 45 views
0

驗證連續字段的最佳方法是什麼?如果無效,請將其更正爲正確的形式?什麼是驗證和解析Pentaho水壺複雜領域的最佳方法?

最簡單的例子是檢查電話號碼字段(可以不同格式 - > 111-111-1111,(111)111-1111等),我們最好想驗證這些和標準化爲一種形式(可以說:1111111111)。一種方法是使用過濾器行,然後使用正則表達式,或者我們可以使用數據驗證器。但是這隻會告訴我們什麼樣的數據是無效的,但實際上並沒有爲我們格式化。然後,我們可以使用Javascript修改的值步驟來編寫一個js腳本來執行此操作。但我猜測有一個更好的方法(或者我沒有遇到過的內置集成)可以做這些基本的驗證。還是建議只將包含無效字段的行轉儲到單獨的csv文件中,然後使用腳本分別解析它?

+0

我不會在你的發言後面發表*但這隻會告訴我們什麼樣的數據是無效的,但實際上並沒有爲我們格式化*實際上,當使用正則表達式和組時,你已經完成了一半的格式化操作,確定了您的邏輯組件。在你上面的情況下,你將有三組數字,你將連接成一個。你可以編輯你的問題來增加兩三個例子嗎?我認爲這會使所需變革的複雜性更加明確,並且有人可能會提出具體的建議。 – 2014-10-18 09:47:41

+0

這看起來像一個清晰的正則表達式應用程序。如上所述,我將採用捕獲組的正則表達式步驟,然後是篩選器行步驟以篩選出不正確的數據,然後您可以以任何您想要的格式收集組(字符串操作,計算器,用戶定義的java表達式,等等。) – nsousa 2014-10-20 08:54:42

回答

0

天兒真好

我使用優邁「的字符串替換」來處理這種情況下

可以累計申請規則,從單一的步驟中的字符串消除不良焦 - 這是很容易使用單個字符修復,就像您所描述的一樣,最重要的是,它也允許您基於正則表達式進行搜索 - 在一個步驟中,您已經記錄了您的標準化並在您的案例中生成了清理輸出

,我會創建兩個'規則'來取代()沒什麼 - 但是,-是有點棘手;您需要一個規則來刪除單個字符,因此您需要知道單個數據字段中的最大數量-,然後將這多行添加到'替換字符串'步驟中

如果這不合意,考慮「用戶定義的Java表達」和replace一個呼叫,例如:((t0 != null) ? t0.replace("-","") : t0)

正如我所說,每個「修復」是按順序施加 - 的In stream field是輸入字段名,而Outstream field是左空指示迪修改字段本身 - 這裏是一個更復雜的例子,其中i搜索正則表達式,並沒有取代他們,逃避的情況下我逃脫"雙引號:

In stream field Out stream field use RegEx Search           Replace with 
sc_srcuri       N   {Internal.Transformation.Filename.Directory}     
re_s_sciname      Y   ["]            \\" 
re_s_sciname      Y   .[\x08]              
re_s_sciname      Y   .[\x08]              
re_s_sciname      Y   .[\x08]              
re_s_sciname      Y   [*]               
re_s_sciname      Y   \s*$               
re_s_sciname      Y   ^\s*               

通知我正在移除多達三個「從這個特定的字符串中刪除'控制碼​​[\x08]

相關問題