2

フィールドとフィールド値の両方にパイプ (|) 区切り文字が含まれている入力として文字列を取る UDF (キューのすべての値) を開発しようとしています。また、文字列にはヘッダーと詳細の両方が含まれます。

ヘッダー フィールドは 1 回、詳細は 1 行に N 回表示されます。

以下は入力文字列です::


Headerfield1|fieldValue1|Headerfield2|fieldValue2|Headerfield3|fieldValue3|Headerfield4|fieldValue4|Headerfield5|fieldValue5|Headerfield6|fieldValue6|Itemfield1|fieldvalue1|Itemfield1|fieldvalue1|Itemfield2|fieldvalue2|Itemfield3|fieldvalue3|Itemfield4|fieldvalue4|Itemfield1-1|fieldvalue1-1|Itemfield2-1|fieldvalue1-2|Itemfield3-1|fieldvalue3-1|Itemfield4-1|fieldvalue4-1|Itemfield1-2|fieldvalue1-2|Itemfield2-2|fieldvalue2-2|Itemfield3-2|fieldvalue3-2|Itemfield4-2|fieldvalue4-2|

上記の文字列で、Headerfield1 はフィールドであり、対応する値は fieldValue1 です。

UDF では、変数入力に入力文字列を渡し、変数フィールドに必須フィールドを渡します。

フィールド名を渡そうとしていますが、対応するフィールド値を出力として期待しています

Below is the UDF

public void StringSplit(String[] input, String[] field, ResultList result, Container container) throws StreamTransformationException{

String str = input.toString();
String tokens[] = str.split("\\|");
Map<String, String>tokensMap = new HashMap();
  int j =0;
  for(int i =0; i <tokens.length ; i++)
  {
    if(j == i)
    {
     String key = tokens[i].toString();
       if (key.contains("-"))
     {
     String key2 = key.substring(0, key.indexOf("-"));
     if(tokensMap.containsKey(key2))
     {
     tokensMap.put(key2, tokensMap.get(key2)+","+tokens[i+1].toString());
     }
     else
     {
     tokensMap.put(key.substring(0, key.indexOf("-")),tokens[i+1].toString());
     }
     }
     else
     {
     tokensMap.put(tokens[i].toString(),tokens[i+1].toString());
     }
     j = i+2;
    }
   }
  String[] result1 = tokensMap.get(field).split(",");
  for (int i = 0; i < result1.length; i++)
{
if (result1[i].equals("") || result1[i].equals(null) )
result.addSuppress();
else
      result.addValue(result1[i]);  
}
}

この UDF は、入力文字列を受け取り、パイプ (|) で分割し、トークンに保持して、後で tokensMap に追加します。最後に、必要なフィールドを取得して result1 に格納し、for ループを使用して結果リストに追加します。以下のエラーが表示されます。

エラー

例外: [java.lang.ArrayIndexOutOfBoundsException:] クラス com.sap.xi.tf.

エラーログのスクリーンショットを添付。PFA。

エラーを確認し、変更が必要な場所を提案してください。

前もって感謝します

Chakradhar Nさん、ありがとう!

4

0 に答える 0