0

私はBeanshellを使用してSWIFTデータを解析しており、これらのSWIFTタグを参照して値を抽出する必要があります。現在、これらの値を静的に取得しています。

String getACRU = swiftMessage.getTagData("19A",":ACRU//");
String getANTO = swiftMessage.getTagData("19A",":ANTO//");
String getCHAR = swiftMessage.getTagData("19A",":CHAR//");
String getCOUN = swiftMessage.getTagData("19A",":COUN//");
String getEXEC = swiftMessage.getTagData("19A",":EXEC//");
String getISDI = swiftMessage.getTagData("19A",":ISDI//");
String getLADT = swiftMessage.getTagData("19A",":LADT//");
String getLEVY = swiftMessage.getTagData("19A",":LEVY//");
String getLOCL = swiftMessage.getTagData("19A",":LOCL//");
String getLOCO = swiftMessage.getTagData("19A",":LOCO//");
String getMARG = swiftMessage.getTagData("19A",":MARG//");
String getOTHR = swiftMessage.getTagData("19A",":OTHR//");
String getPOST = swiftMessage.getTagData("19A",":POST//");
String getREGF = swiftMessage.getTagData("19A",":REGF//");
String getSHIP = swiftMessage.getTagData("19A",":SHIP//");
String getSPCN = swiftMessage.getTagData("19A",":SPCN//");
String getSTAM = swiftMessage.getTagData("19A",":STAM//");
String getSTEX = swiftMessage.getTagData("19A",":STEX//");
String getTRAN = swiftMessage.getTagData("19A",":TRAN//");
String getTRAX = swiftMessage.getTagData("19A",":TRAX//");
String getVATA = swiftMessage.getTagData("19A",":VATA//");
String getWITH = swiftMessage.getTagData("19A",":WITH//");
String getCOAX = swiftMessage.getTagData("19A",":COAX//");
String getACCA = swiftMessage.getTagData("19A",":ACCA//");

私の質問は2つあります:これをエレガントに書き直すための最良の方法と、最初の3文字を削除し、コンマをピリオドに変更し、それらの値がすべて完了したら、Beanshellでメソッド/関数を追加するための最良の方法は何ですか?メッセージから解析して、それらをすべて合計しますか?

4

2 に答える 2

1

申し訳ありませんが、私はまだBeanShellとJavaの初心者ですが、機能しますか?(これは回避策のようなものです...)

String [] tagArray = new String []
{ "ACRU", "ANTO", "CHAR", "COUN", "EXEC",
  "ISDI", "LADT", "LEVY", "LOCL", "LOCO",
  "MARG", "OTHR", "POST", "REGF", "SHIP",
  "SPCN", "STAM", "STEX", "TRAN", "TRAX",
  "VATA", "WITH", "COAX", "ACCA" };

for (i: tagArray) {
  // it was a test: print(i);
  eval("String get" + i + " = swiftMessage.getTagData(\"19A\", \":" + i + "//\")");
}

(私の悪い英語もごめんなさい...)

于 2014-01-30T03:31:52.297 に答える
0

これは非常にうまくいったようです。必要なすべての値を配列に格納します。

String [] tagArray = new String [] { ":ACRU//",":ANTO//",":CHAR//",":COUN//",":EXEC//",":ISDI//",":LADT//",":LEVY//",":LOCL//",":LOCO//",":MARG//",":OTHR//",":POST//",":REGF//",":SHIP//",":SPCN//",":STAM//",":STEX//",":TRAN//",":TRAX//",":VATA//",":WITH//",":COAX//",":ACCA//" };

そして、ループして追加する関数を作成します。

double sumTags(SwiftMessage inboundSwiftmessage, String inboundTagNumber, String [] inboundTagArray){
  double getTotal;
  for( tagArrayData : inboundTagArray ){
    String getData = stripData(inboundSwiftmessage.getTagData(inboundTagNumber,tagArrayData));
    getTotal = getTotal + Double.parseDouble(getData);
  }
  return getTotal;
}

そして、これは最初の3文字を削除し、コンマをピリオドに変換してから削除する関数です。

String stripData(String inboundString){
  if (inboundString==null){
    return "0";
  }
  else
  {
    char strippedString;
    StringBuffer strippedBuffer = new StringBuffer("");
    char [] inboundArray = inboundString.toCharArray();
    for (int counter = 3 ; counter < inboundArray.length; counter++)
    {
      strippedString = inboundArray[counter];
      strippedBuffer.append(strippedString);
    }
    return strippedBuffer.toString().replace(",",".");
  }
}
于 2012-02-01T18:36:48.137 に答える