如何使用Talend删除tmap中最后一行的最后一个字符?

时间:2017-06-27 09:43:49

标签: database integration talend tmap

我使用textractjson提取两列并将其传递给tmap组件,我将两个列连接为单个列。

另外,我想在除最后一行之外的每一行的末尾添加一个逗号。

我不知道该怎么做。

示例:

tmap中有两列作为输入:

  1. FirstName
  2. LastName
  3. 在输出中,我将它们连接到:

    FirstName+LastName+","
    

    问题是我不想在最后一行写逗号。

3 个答案:

答案 0 :(得分:1)

这取决于您的工作布局和输入结构。

您似乎使用tExtractJSON,这可能意味着您从REST调用或数据库中获取数据。

由于JSON数据结构没有固定的行数,因此您将无法使用((Integer)globalMap.get("tFileInputDelimited_1_NB_LINE"))。同样,由于我们不知道您的工作布局,这取决于它。

如果不是这种情况,我会首先计算tJavaRow组件中的行,然后添加第二个tJavaRow,我将连接字符串(不会在tMap中执行此操作) ),但省略最后一个逗号。我能用我先做的计数找到最后一行。这取决于您的Java技能。

答案 1 :(得分:1)

您也可以使用tJavaRow连接全局变量中的所有行,每行的末尾都有逗号。
然后,启动一个新的subjob(onSubjobOk),然后使用tJava,删除最后一个字符(所以最后一个逗号)。
非常简单,不必知道输入流中有多少行,但假设您希望将结果作为单个字符串(此处包含在全局变量中)。

答案 2 :(得分:1)

我也可能错了。基本上连接FirstName和LastName,使用 Numeric.Sequence()函数创建记录号列,并使用另一个上下文变量并在 tJavaRow中存储相同的序列号(它可能存储最后一个值) 组件。

output_row.name = input_row.FirstName+""+input_row.LastName+","+;
output_row.record_number = Numeric.sequence("recNo", 1, 1);
context.lastNumber = Numeric.sequence("recNo", 1, 1);

在自定义java例程中创建一个方法。

public static string main _nameChange(String name,Integer record_number){
if(context.lastNumber == record_number){
name = name.substring(0,name.length()-1);
return name;
}
else{
return name;
}
}

现在在 tmap 组件中调用 _nameChange 方法。现在你可以修剪最后一行的最后一个字符 Ror参考check this