Pentaho Kettle-非结构化文本文件

Pentaho Kettle-非结构化文本文件,pentaho,etl,kettle,Pentaho,Etl,Kettle,我有一个文本文件,它的结构不是在一行中,可以肯定的是,这些行以0开头。以下是示例: header : TEXT<br> header : TEXT<br> header : TEXT<br> line 1 : 0TEXT Name Other Field<br> line 2 : TEXT Other Field Phone<br> line 3 : 0TEXT Name Other Field<br> line 4 : T

我有一个文本文件,它的结构不是在一行中,可以肯定的是,这些行以0开头。以下是示例:

header : TEXT<br>
header : TEXT<br>
header : TEXT<br>
line 1 : 0TEXT Name Other Field<br>
line 2 : TEXT Other Field Phone<br>
line 3 : 0TEXT Name Other Field<br>
line 4 : TEXT Other Field Phone<br>
line 5 : 0TEXT  textexttexttext <br>
line 6 : 0TEXT Name Other Field<br>
line 7 : TEXT Other Field Phone<br>
line 8 : 0TEXT Name Other Field<br>
line 9 : TEXT Other Field Phone<br>
使用这个脚本,我将行分隔开,我希望将它们连接起来,然后应用正则表达式。我可以连接属于该组的所有行,并使用正则表达式删除那些不必要的行


谢谢

鉴于您有多行记录,您可以选择以下选项:

1 Group by:只要您可以通过一组键识别属于同一行的行,您就可以使用Group by并创建两个新字段,即Name和Phone,这两个字段是通过连接由分隔的字段而不是由、、分隔的连接字段获得的。如果这些值是您想要保留的值或为null,则串联起作用; 2反正常化。同样的原则也适用,您需要一组键来识别属于一起的记录,但您需要您的姓名和电话都位于同一字段中,例如,值,并且您需要另一个带有键的字段,即姓名或电话。 3也许是最好的一个:分析查询:使用Lag N rows forward和get字段N=1,您可以得到下一行的电话号码。在此步骤之后,您有一个非空名称和下一行的电话号码的行;具有空名称和空电话号码的行。过滤您想要的行之后,您就完成了


这只是一个一般的想法。你必须整理好细节。

你能解释一下吗。我有一个关于人的信息的文件,我想把他们的姓名和电话提取到数据库中。我知道在txt中,姓名和电话总是在后面的行中。对于您给出的这些解决方案。。。1和2-我不是所有的行都有ID,但是布局是固定的,一行以零开始,包含名称,下一行包含电话号码。我也尝试了3,但我得到的只是空值。我更新了描述,也许更容易理解我想做什么。你可能需要更多的准备工作,筛选出字段2是名称或字段4是电话号码的行,哪些行不是。但是分析查询是从多行读取数据的方法。我发现了问题,我一直在实例化x。我修改,而不是var x=;我只是做了var x;x变成一个全局变量,我可以根据需要连接多少行,这就解决了我的问题,谢谢你的帮助=D
var x;
var charInitial = line.toString().charAt(0);

if(charInitial == '0') {
    x = line.toString();
}
else{
    x += line.toString();
}