Leonardo
Leonardo

Reputation: 129

Talend: Save variable for later use

I´m trying to save a value in spreadsheet's header for later use as a new column value.

This is the reduced version with value (XYZ) in header:

original report

The value in header must be used for new column CODE: enter image description here

This is my design:

enter image description here

tFilterRow_1 is used to reject rows without values in A, B, C columns. There is a conditional in tJavaRow_1 to set a global variable:

if(String.valueOf(row1.col_a).equals("CODE:")){
  globalMap.putIfAbsent("code", row1.col_b);
}

The Var expression in tMap_1 to get the global variable is:

(String)globalMap.get("code")  

The Var "code" is mapped to column "code" but I'm getting this output:

a1|b1|c1|
a2|b2|c2|
a3|b3|c3|

What is missed or there is a better approach to accomplish this escenario ? Thanks in advance.

Upvotes: 1

Views: 696

Answers (1)

Balazs Gunics
Balazs Gunics

Reputation: 2067

Short answer: I tJavaRow use the input_row or the actual rowN in this case row4.

Longer answer, how I'd do it.

I'd do is let the excel flow in AS-IS. By using some Java tricks we can simply skip the first few rows then let the rest of the flow go through. So the filter + tjavarow combo can be replaced with a tJavaFlex.

tJavaFlex I'd do:

begin:

boolean contentFound = false;

main

if(input_row.col1 != null && input_row.col1.equalsIgnoreCase("Code:") ) {
   globalMap.put("code",input_row.col2);
}
if(input_row.col1 != null && input_row.col1.equalsIgnoreCase("Column A:") ) {
   contentFound = true;
} else {
   if(false == contentFound) continue;
}

This way you'll simply skip the first few records (i.e header) and only care about the actual data.

Upvotes: 1

Related Questions