Что такое элегантное решение в бобовой оболочке для циклов и массивов - PullRequest
0 голосов
/ 31 января 2012

Я работаю с бобовой оболочкой для анализа данных 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 ]

1 голос
/ 30 января 2014

Извините, я все еще новичок в 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 + "//\")");
}

(Извините за мой плохой английский тоже ...)

0 голосов
/ 01 февраля 2012

Кажется, это работало довольно хорошо.Сохраните все необходимые значения в массиве:

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(",",".");
  }
}
...