我正在使用Apache NiFi來構建我的數據流,而我目前處理的實際數據是由分隔值組成的。我想用ExecuteScript,爲了做到這一點我已經把一個簡單的Groovy腳本,應該做到以下幾點:Groovy腳本用「」代替 r n, n和 t
1)與管道(取代目前的分隔符|)
2)替換\ r \ n和\標籤與「」
這樣做的原因腳本是做一些數據的清洗和扯皮上的數據集顯示了以下問題:
一)文本(長常)通過跨線切割\tab
或\r\n
。這可能發生在完全停止之前,但它不一致。
B)空行(目前該腳本不會在這個摸還)
1)是很容易做到,但對於2碼)似乎並沒有刪除表格和回車,我不知道爲什麼。這裏是代碼:
import org.apache.nifi.processor.io.StreamCallback
import java.nio.charset.StandardCharsets
def flowFile = session.get()
if(!flowFile) return
flowFile = session.write(flowFile, {inputStream, outputStream ->
inputStream.eachLine { line ->
def a = line.replaceAll('\t', ' ').replaceAll('\r\n', ' ').replaceAll('¦', '|')
outputStream.write("${a}\n".toString().getBytes(StandardCharsets.UTF_8))
}
} as StreamCallback)
session.transfer(flowFile, REL_SUCCESS)
謝謝你的幫助。
你確定標籤實際上是ASCII碼9h和「回車」是回車和線組合feed /換行符(ASCII Dh和Ah)?請參閱http://www.asciitable.com/ –
如果您逐行遍歷輸入流,我認爲您不能替換分隔線的換行符,或者加入兩條結果行。也許你可以做一個正則表達式替換? – James
@EmmanuelRosa,謝謝你。我並不十分熟悉字符編碼的所有差異,但是我已經通過選項「顯示所有字符」提示了Notepad ++中的所有字符,並且LF位於每行的末尾。在某些情況下是可以的,在其他情況下,它可以任意分解長文本並進入新行。我還將當前輸出與原始輸出進行了比較,並設法擺脫\ tab和CR LF。 – paranza