您好我正在使用tMap组件和Vloopup功能遇到问题。 基本上我输入了一个excel文件,我已经复制了输入,一个用于主行,另一个用于查找:
Excel列(FileInputExcel_1 + FileInputExcel_3):
我的目标是: FileInputExcel_1逐行迭代, 对于每个FileInputExcel_1行,我需要在COL2中查找FileInputExcel_1 COL3 返回第一个匹配FileInputExcel_3 COL1值 FIRST MATCH FileInputExcel_3 ROW> =实际ROW迭代FileInputExcel_1
ie:ROW 1结果应为61416:
ie:ROW 5结果应为3225:
我已经尝试过使用tMap,但我不明白如何遵守ROW规则:尽管有光标,但我总是无法获得第一个匹配(仅返回BN_LINE变量) at和subjob,所以不能使用它)。 任何想法/解决方法? 非常感谢
答案 0 :(得分:2)
在tMap中你必须加入(内连接,你想要获得匹配的记录)输入和查找如下。
row3.COL3 = row4.COL2
然后将结果映射到tMap的右侧
row4.COL1 - >结果。
答案 1 :(得分:2)
我有另一个建议我已经改变了一点,100%工作并且只使用没有JAVA代码段的Talend组件。
1,在tFileExcelInput中添加一个代表行号的列(例如等级);结果缓冲到tHashOutput_1
2,使用tMap将tHashOutput_1与自身连接,对等级进行过滤,确保选择所有匹配
3,使用tUniqRow消除重复
答案 2 :(得分:1)
如果您了解Java,可以先在Java List(ArrayList)中加载Excel文件值(col1和col2)。
然后迭代Excel文件,递增计数器。对于每一行,找到Java列表中的第一个匹配,但是从索引开始等于你的计数器。
(抱歉我的英语不好)
编辑:使用TOS 6.2.1的示例
2个上下文变量:
- myValues(Object)
- index(整数)默认为0
a busy cat http://img4.hostingpics.net/pics/478043schema.png
首先,我们在列表中加载您的excel数据。我们迭代你的文件,为tJavaRow组件中的每一行"加载数据":
if(context.myValues == null){
context.myValues = new java.util.ArrayList<>();
}
// Create a pair contening col1 and col3
javafx.util.Pair<String, String> pair = new javafx.util.Pair<>(input_row.col1, input_row.col3);
// Add the pair in the list
((java.util.ArrayList<javafx.util.Pair<String, String>>)context.myValues).add(pair);
然后我们再次迭代excel1(就像你的工作一样),但在tjavaRow&#34; index&#34;中,我们搜索自当前索引以来的第一个匹配:
java.util.ArrayList<javafx.util.Pair<String, String>> myList = ((java.util.ArrayList<javafx.util.Pair<String, String>>) context.myValues);
// For each row in the list startin from the current index
for(int i = context.index; i < myList.size(); i++){
javafx.util.Pair<String, String> currentPair = myList.get(i);
// if col3 == col2
if(currentPair.getValue().equals(input_row.col2)){
output_row.expectedCol1 = currentPair.getKey();
break;
}
}
// move to next index
context.index++;
希望它会帮助你