diff --git a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/AbstractDataSetOperateFunction.java b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/AbstractDataSetOperateFunction.java index c5abb6a577ef38853b8e7e31567764fc5b5538db..09e129dd9c875baf2debdbb84ff9f2818b3def99 100644 --- a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/AbstractDataSetOperateFunction.java +++ b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/AbstractDataSetOperateFunction.java @@ -40,13 +40,13 @@ public abstract class AbstractDataSetOperateFunction extends AbstractScriptFunct for (String pk : (List) pks) { int pkIndex = DataSetUtil.getFieldIndex(dataSet, pk); if (pkIndex != -1) { - pksIndex.add(dataSet.isIndexFromOne() ? pkIndex + 1 : pkIndex); + pksIndex.add(pkIndex); } } } else if (pks instanceof String) { int pkIndex = DataSetUtil.getFieldIndex(dataSet, (String) pks); if (pkIndex != -1) { - pksIndex.add(dataSet.isIndexFromOne() ? pkIndex + 1 : pkIndex); + pksIndex.add(pkIndex); } } return pksIndex; @@ -55,9 +55,9 @@ public abstract class AbstractDataSetOperateFunction extends AbstractScriptFunct protected Map createMapDataSetRows(AbstractDataSet dataSet, Object pks, ScriptContext context) throws Exception { Map result = new LinkedHashMap(); - for (int i = 1; i <= dataSet.getRows(); i++) { + for (int i = 0; i < dataSet.getRows(); i++) { String key = createRowKey(dataSet, pks, i, context); - result.put(key, new DefaultDataSetRow(dataSet, i)); + result.put(key, new DefaultDataSetRow(dataSet, dataSet.getShowIndex(i))); } return result; } @@ -68,7 +68,7 @@ public abstract class AbstractDataSetOperateFunction extends AbstractScriptFunct List pksIndex = showPkIndex(dataSet, pks); StringBuilder builder = new StringBuilder(); for (int col : pksIndex) { - builder.append(dataSet.getData(row, col)); + builder.append(dataSet.getData(dataSet.getShowIndex(row), dataSet.getShowIndex(col))); } return builder.toString(); } else if (pks instanceof LambdaFunction) { @@ -76,7 +76,7 @@ public abstract class AbstractDataSetOperateFunction extends AbstractScriptFunct ScriptContext subContext = new DefaultScriptContext(); subContext.setParent(context); for (int i = 0; i < dataSet.getFields().size(); i++) { - subContext.put(dataSet.getFields().get(i).getName(), dataSet.getData(row, i + 1)); + subContext.put(dataSet.getFields().get(i).getName(), dataSet.getData(row, dataSet.getShowIndex(i))); } return keyFunction.execute(subContext).getResult().toString(); diff --git a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetFieldFunction.java b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetFieldFunction.java index 28c5f2371741c3c174bfc8d1eced95417ad34594..fb30e82efaf029374dc827ae6a747b7bb8635cf4 100644 --- a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetFieldFunction.java +++ b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetFieldFunction.java @@ -54,7 +54,8 @@ public class DataSetFieldFunction extends AbstractScriptFunction { } private int getFieldIndex(DataSet dataSet, String name) throws Exception { - return DataSetUtil.getFieldIndex(dataSet, name); + int index = DataSetUtil.getFieldIndex(dataSet, name); + return dataSet.isIndexFromOne() ? index + 1 : index; } } diff --git a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetIntersectionFunction.java b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetIntersectionFunction.java index d47ab95ddabf7830c6354be96972d11b8390e219..329d9129dd884eee2996a4fb9848a2f8e1af23c2 100644 --- a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetIntersectionFunction.java +++ b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetIntersectionFunction.java @@ -62,8 +62,8 @@ public class DataSetIntersectionFunction extends AbstractDataSetOperateFunction protected DataSet operate(AbstractDataSet dataSet1, AbstractDataSet dataSet2, Object pks, ScriptContext context) throws Exception { Map map = createMapDataSetRows(dataSet1, pks, context); - Map newMap = new LinkedHashMap(); - for (int i = 1; i <= dataSet2.getRows(); i++) { + Map newMap = new LinkedHashMap(); + for (int i = 0; i < dataSet2.getRows(); i++) { String key = createRowKey(dataSet2, pks, i, context); if (map.containsKey(key)) { newMap.put(key, map.get(key)); diff --git a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetKnapsackFunction.java b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetKnapsackFunction.java index 554bf3c13b83ef9e677b46d3bfed6e15fbd2451f..8a807b90675dfc1de4b150888c1d169d2bd6050b 100644 --- a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetKnapsackFunction.java +++ b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetKnapsackFunction.java @@ -90,14 +90,15 @@ public class DataSetKnapsackFunction extends AbstractDpKnapsackFunction { int length; DefaultDataSetColumn setColumn = (DefaultDataSetColumn) array; Object obj = null; + boolean isIndexFromOne = setColumn.isIndexFromOne(); try { length = setColumn.getRows(); obj = Array.newInstance(clazz, length + 1); for (int i = 1; i < length + 1; i++) { if (clazz == int.class || clazz == Integer.class) { - Array.set(obj, i, Integer.parseInt(setColumn.getData(i) + "")); + Array.set(obj, i, Integer.parseInt(setColumn.getData(isIndexFromOne ? i : i - 1) + "")); } else { - Array.set(obj, i, Double.parseDouble(setColumn.getData(i) + "")); + Array.set(obj, i, Double.parseDouble(setColumn.getData(isIndexFromOne ? i : i - 1) + "")); } } } catch (Exception e) { @@ -118,6 +119,7 @@ public class DataSetKnapsackFunction extends AbstractDpKnapsackFunction { } catch (Exception e) { throw new ScriptException(ResourceBundleUtil.getResourceMessage("dataset", "dataset.addcontext.error")); } + subContext.put("isIndexFromOne", dataSet.isIndexFromOne()); return subContext; } @@ -134,7 +136,7 @@ public class DataSetKnapsackFunction extends AbstractDpKnapsackFunction { dataSet = (SimpleDataSet) ((SimpleDataSet) obj).clone(); for (int i = 1; i < result.size(); i++) { if ((Integer) result.get(i) == 0) { - dataSet.deleteRow(i - index); + dataSet.deleteRow(dataSet.isIndexFromOne() ? i - index : i - index - 1); index++; } } diff --git a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetSubtractFunction.java b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetSubtractFunction.java index 09781faec2ca39b6fc3166b8c630a4db954594ed..091eaf61584b6f2563d81d1823b926b3487579be 100644 --- a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetSubtractFunction.java +++ b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetSubtractFunction.java @@ -50,7 +50,7 @@ public class DataSetSubtractFunction extends AbstractDataSetOperateFunction { protected DataSet operate(AbstractDataSet dataSet1, AbstractDataSet dataSet2, Object pks, ScriptContext context) throws Exception { Map map = createMapDataSetRows(dataSet1, pks, context); - for (int i = 1; i <= dataSet2.getRows(); i++) { + for (int i = 0; i < dataSet2.getRows(); i++) { String key = createRowKey(dataSet2, pks, i, context); if (map.containsKey(key)) { map.remove(key); diff --git a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetToBeanListFunction.java b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetToBeanListFunction.java index fa387ebbfadef8dbbd40cfce143e7531a6ebad6d..9ea36942957117e61944f7b93ffb8175dcdb9d7b 100644 --- a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetToBeanListFunction.java +++ b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetToBeanListFunction.java @@ -6,6 +6,7 @@ import java.util.List; import org.tinygroup.tinyscript.ScriptContext; import org.tinygroup.tinyscript.ScriptException; import org.tinygroup.tinyscript.ScriptSegment; +import org.tinygroup.tinyscript.dataset.AbstractDataSet; import org.tinygroup.tinyscript.dataset.DataSet; import org.tinygroup.tinyscript.dataset.impl.DataSetBean; import org.tinygroup.tinyscript.function.AbstractScriptFunction; @@ -29,10 +30,10 @@ public class DataSetToBeanListFunction extends AbstractScriptFunction { if (parameters == null || parameters.length == 0) { throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.empty", getNames())); } else if (checkParameters(parameters, 1)) { - DataSet dataSet = (DataSet) parameters[0]; + AbstractDataSet dataSet = (AbstractDataSet) parameters[0]; List list = new ArrayList(); - for (int i = 1; i <= dataSet.getRows(); i++) { - list.add(new DataSetBean(dataSet, i)); + for (int i = 0; i < dataSet.getRows(); i++) { + list.add(new DataSetBean(dataSet, dataSet.getShowIndex(i))); } return list; } else { diff --git a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetUnionFunction.java b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetUnionFunction.java index 6fc5933ae0ba65748957f37eeaba6aecac944ab3..ae0daba49cc17fd944cf077714951776a68e5b01 100644 --- a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetUnionFunction.java +++ b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetUnionFunction.java @@ -52,7 +52,7 @@ public class DataSetUnionFunction extends AbstractDataSetOperateFunction { protected DataSet operate(AbstractDataSet dataSet1, AbstractDataSet dataSet2, Object pks, ScriptContext context) throws Exception { Map map = createMapDataSetRows(dataSet1, pks, context); - for (int i = 1; i <= dataSet2.getRows(); i++) { + for (int i = 0; i < dataSet2.getRows(); i++) { String key = createRowKey(dataSet2, pks, i, context); DataSetRow row = new DefaultDataSetRow(dataSet2, i); map.put(key, row); diff --git a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetUpdateFieldFunction.java b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetUpdateFieldFunction.java index 56aea9b82f8c1d09504f10f5a5a4d272779ccacc..e597c5aca6c22a9721a041776a6717ce50274e4d 100644 --- a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetUpdateFieldFunction.java +++ b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetUpdateFieldFunction.java @@ -20,6 +20,7 @@ import org.tinygroup.tinyscript.interpret.ResourceBundleUtil; /** * 合并拆分记录(变更字段) + * * @author yancheng11334 * */ @@ -28,116 +29,119 @@ public class DataSetUpdateFieldFunction extends AbstractScriptFunction { public String getNames() { return "updateField"; } - + public String getBindingTypes() { return DynamicDataSet.class.getName(); } - public Object execute(ScriptSegment segment, ScriptContext context, - Object... parameters) throws ScriptException { - try{ - if (parameters == null || parameters.length == 0) { - throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.empty", getNames())); - } else if(parameters!=null && parameters.length==4 && parameters[0]!=null && parameters[1]!=null){ - DynamicDataSet dynamicDataSet = (DynamicDataSet) parameters[0]; - LambdaFunction lambdaFunction = (LambdaFunction) parameters[1]; - List insertFields = convertFields(parameters[2]); - List deleteFields = convertFields(parameters[3]); - - if(!CollectionUtil.isEmpty(insertFields)){ - //执行插入字段逻辑 - for(Field field:insertFields){ - dynamicDataSet.insertColumn(dynamicDataSet.getFields().size(), field); - } - } - - //逐行遍历 - for (int i = 0; i < dynamicDataSet.getRows(); i++) { - ScriptContext subContext = new DefaultScriptContext(); - subContext.setParent(context); - - //加载行记录信息到上下文环境 - if(lambdaFunction.getParamterNames()!=null && lambdaFunction.getParamterNames().length>0){ - Object[] readParamters = new Object[lambdaFunction.getParamterNames().length]; - //只加载用户指定参数 - for(int j=0;j insertFields = convertFields(parameters[2]); + List deleteFields = convertFields(parameters[3]); + if (!CollectionUtil.isEmpty(insertFields)) { + // 执行插入字段逻辑 + for (Field field : insertFields) { + dynamicDataSet.insertColumn(dynamicDataSet.isIndexFromOne() ? dynamicDataSet.getFields().size() + 1 + : dynamicDataSet.getFields().size(), field); + } + } + + // 逐行遍历 + for (int i = 0; i < dynamicDataSet.getRows(); i++) { + ScriptContext subContext = new DefaultScriptContext(); + subContext.setParent(context); + + // 加载行记录信息到上下文环境 + if (lambdaFunction.getParamterNames() != null && lambdaFunction.getParamterNames().length > 0) { + Object[] readParamters = new Object[lambdaFunction.getParamterNames().length]; + // 只加载用户指定参数 + for (int j = 0; j < lambdaFunction.getParamterNames().length; j++) { + int col = DataSetUtil.getFieldIndex(dynamicDataSet, lambdaFunction.getParamterNames()[j]); + readParamters[j] = dynamicDataSet.getData(dynamicDataSet.getShowIndex(i), + dynamicDataSet.getShowIndex(col)); + } + // 动态执行lambda表达式 + lambdaFunction.execute(subContext, readParamters); + } else { + // 加载全部参数 + for (int j = 0; j < dynamicDataSet.getFields().size(); j++) { + Field f = dynamicDataSet.getFields().get(j); + subContext.put(f.getName(), dynamicDataSet.getData(dynamicDataSet.getShowIndex(i), + dynamicDataSet.getShowIndex(j))); + } + // 动态执行lambda表达式 + lambdaFunction.execute(subContext); + } + + // 根据插入字段更新列 + for (int j = 0; j < insertFields.size(); j++) { + int col = DataSetUtil.getFieldIndex(dynamicDataSet, insertFields.get(j).getName()); + dynamicDataSet.setData(dynamicDataSet.getShowIndex(i), dynamicDataSet.getShowIndex(col), + subContext.getItemMap().get(insertFields.get(j).getName())); + } + } + + if (!CollectionUtil.isEmpty(deleteFields)) { + // 执行删除字段逻辑 + for (Field field : deleteFields) { + dynamicDataSet.deleteColumn(field.getName()); + } + } + return dynamicDataSet; + } else { + throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.error", getNames())); + } + } catch (ScriptException e) { throw e; } catch (Exception e) { throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.run.error", getNames()), e); } } - + /** * 转换字段信息 + * * @param obj * @return * @throws ScriptException */ @SuppressWarnings("rawtypes") - private List convertFields(Object obj) throws ScriptException{ + private List convertFields(Object obj) throws ScriptException { List fields = new ArrayList(); - if(obj!=null){ - if(obj.getClass().isArray()){ - int length = Array.getLength(obj); - for(int i=0;i fields,Object o) throws ScriptException{ - if(o instanceof String){ + + private void addField(List fields, Object o) throws ScriptException { + if (o instanceof String) { String name = (String) o; - fields.add(new Field(name,name,"Object")); - }else if(o instanceof Field){ + fields.add(new Field(name, name, "Object")); + } else if (o instanceof Field) { Field f = (Field) o; fields.add(f); - }else{ - throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.error", getNames())); + } else { + throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.error", getNames())); } } - + } diff --git a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetXorFunction.java b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetXorFunction.java index 5decc1c5558234045e0acae6d8a270dbb8876044..d2aec6b7352760dfe750bb0412aba43f099c1291 100644 --- a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetXorFunction.java +++ b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/function/DataSetXorFunction.java @@ -50,7 +50,7 @@ public class DataSetXorFunction extends AbstractDataSetOperateFunction { throws Exception { Map map = createMapDataSetRows(dataSet1, pks, context); Map newMap = new LinkedHashMap(); - for (int i = 1; i <= dataSet2.getRows(); i++) { + for (int i = 0; i < dataSet2.getRows(); i++) { String key = createRowKey(dataSet2, pks, i, context); DataSetRow row = new DefaultDataSetRow(dataSet2, i); if (!map.containsKey(key)) { diff --git a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/impl/DataSetBean.java b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/impl/DataSetBean.java index dbfbb10f1a659c673ba1fda333f435133e7ecd8c..ab34da7f85151ae7f2a554d52d3d6b533fbf228d 100644 --- a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/impl/DataSetBean.java +++ b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/impl/DataSetBean.java @@ -10,7 +10,7 @@ import java.util.Map; import java.util.Set; import org.tinygroup.tinyscript.ScriptException; -import org.tinygroup.tinyscript.dataset.DataSet; +import org.tinygroup.tinyscript.dataset.AbstractDataSet; import org.tinygroup.tinyscript.dataset.Field; import org.tinygroup.tinyscript.interpret.ResourceBundleUtil; @@ -41,11 +41,11 @@ public class DataSetBean implements Map { putAll(map); } - public DataSetBean(DataSet dataSet, int rowId) { + public DataSetBean(AbstractDataSet dataSet, int rowId) { this(dataSet, rowId, false); } - public DataSetBean(DataSet dataSet, int rowId, boolean order) { + public DataSetBean(AbstractDataSet dataSet, int rowId, boolean order) { if (order) { map = new LinkedHashMap(); } else { @@ -54,9 +54,9 @@ public class DataSetBean implements Map { this.fields = dataSet.getFields(); this.rowId = rowId; this.type = dataSet.getClass().getSimpleName(); - for (int i = 1; i <= fields.size(); i++) { + for (int i = 0; i < fields.size(); i++) { try { - put(fields.get(i - 1).getName(), dataSet.getData(rowId, i)); + put(fields.get(i).getName(), dataSet.getData(rowId, dataSet.getShowIndex(i))); } catch (Exception e) { e.printStackTrace(); } diff --git a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/impl/SimpleDataSet.java b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/impl/SimpleDataSet.java index 75dd8051bb051a0bba3cc1eaebc3c73935a0a3eb..88a9fe2b340fef9c3f2cb6cca67002ae0f24356e 100644 --- a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/impl/SimpleDataSet.java +++ b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/impl/SimpleDataSet.java @@ -202,12 +202,12 @@ public class SimpleDataSet extends DynamicDataSet implements Cloneable { public DynamicDataSet insertColumn(int col, Field field) throws Exception { int colNum = getColumns(); if (isIndexFromOne()) { - if (col < 1 || col >= colNum + 1) { + if (col < 1 || col > colNum + 1) { throw new Exception(ResourceBundleUtil.getResourceMessage("dataset", "dataset.row.outofindex", "insertColumn", col)); } } else { - if (col < 0 || col >= colNum) { + if (col < 0 || col > colNum) { throw new Exception(ResourceBundleUtil.getResourceMessage("dataset", "dataset.row.outofindex", "insertColumn", col)); } diff --git a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/objectitem/DataSetColumnItemProcessor.java b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/objectitem/DataSetColumnItemProcessor.java index 0a130433d1406f1f8f26f99fc4c1df402b8b9d63..bd78d3162005002f85f90e251b848147b6fb669b 100644 --- a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/objectitem/DataSetColumnItemProcessor.java +++ b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/objectitem/DataSetColumnItemProcessor.java @@ -1,53 +1,49 @@ package org.tinygroup.tinyscript.dataset.objectitem; import org.tinygroup.tinyscript.ScriptContext; -import org.tinygroup.tinyscript.ScriptEngine; import org.tinygroup.tinyscript.dataset.DataSetColumn; import org.tinygroup.tinyscript.dataset.util.DataSetUtil; -import org.tinygroup.tinyscript.interpret.ScriptContextUtil; import org.tinygroup.tinyscript.objectitem.ObjectSingleItemProcessor; /** * 下标方式访问数据集列对象 + * * @author yancheng11334 * */ -public class DataSetColumnItemProcessor extends ObjectSingleItemProcessor{ +public class DataSetColumnItemProcessor extends ObjectSingleItemProcessor { protected boolean isMatch(Object obj, Object item) { return obj instanceof DataSetColumn; } - protected Object process(ScriptContext context, Object obj, Object item) - throws Exception { + protected Object process(ScriptContext context, Object obj, Object item) throws Exception { DataSetColumn dataSetColumn = (DataSetColumn) obj; - int row = (Integer)DataSetUtil.getValue(item,context); + int row = (Integer) DataSetUtil.getValue(item, context); Integer currentRow = context.get("$currentRow"); - if(currentRow!=null){ - int newRow = currentRow.intValue()+row; - ScriptEngine engine = ScriptContextUtil.getScriptEngine(context); - if(engine.isIndexFromOne()){ - //偏移的情况下,越界返回null - if(newRow<1 || newRow > dataSetColumn.getRows()){ - return null; + if (currentRow != null) { + int newRow = currentRow.intValue() + row; + if (dataSetColumn.isIndexFromOne()) { + // 偏移的情况下,越界返回null + if (newRow < 1 || newRow > dataSetColumn.getRows()) { + return null; } - }else{ - //偏移的情况下,越界返回null - if(newRow<0 || newRow > dataSetColumn.getRows()-1){ - return null; + } else { + // 偏移的情况下,越界返回null + if (newRow < 0 || newRow > dataSetColumn.getRows() - 1) { + return null; } } - return dataSetColumn.getData(newRow); //这里的row就表示偏移 - }else{ + return dataSetColumn.getData(newRow); // 这里的row就表示偏移 + } else { return dataSetColumn.getData(row); } - + } - protected void assignValue(ScriptContext context, Object value, Object obj, - Object item) throws Exception { + protected void assignValue(ScriptContext context, Object value, Object obj, Object item) throws Exception { DataSetColumn dataSetColumn = (DataSetColumn) obj; - int row = (Integer)DataSetUtil.getValue(item,context); + int row = (Integer) DataSetUtil.getValue(item, context); dataSetColumn.setData(row, value); } diff --git a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/util/DataSetUtil.java b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/util/DataSetUtil.java index 55841a014654198fa3223163f1f2af2671b71436..1ff65b62464afb9d15811d50d50c7198f37b8623 100644 --- a/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/util/DataSetUtil.java +++ b/org.tinygroup.tinyscript.dataset/src/main/java/org/tinygroup/tinyscript/dataset/util/DataSetUtil.java @@ -70,8 +70,7 @@ public final class DataSetUtil { data[rowId] = new Object[fields.size()]; for (int i = 0; i < fields.size(); i++) { - - data[rowId][i] = row.getData(i + 1); + data[rowId][i] = row.getData(isIndexFromOne ? i + 1 : i); } rowId++; } @@ -288,9 +287,10 @@ public final class DataSetUtil { } return -1; } - + /** * 返回一组索引字段对应的列 + * * @param fields * @param colNames * @return @@ -298,8 +298,8 @@ public final class DataSetUtil { */ public static int[] getFieldIndex(List fields, String[] colNames) throws Exception { int[] cols = new int[colNames.length]; - for(int i=0;i{f1=MINVAL+MAXVAL;f2=MINVAL*2;f3=MINVAL*4;},{\"f1\"},{\"MINVAL\",\"MAXVAL\"});",context); + + // 合并字段 + DataSet result = (DataSet) engine.execute( + "return mailDs.updateField((MINVAL,MAXVAL)->{f1=MINVAL+MAXVAL;f2=MINVAL*2;f3=MINVAL*4;},{\"f1\"},{\"MINVAL\",\"MAXVAL\"});", + context); assertEquals(4, result.getColumns()); - - mailDs = (DataSet) engine.execute("return readTxt(\"src/test/resources/mailCharge.txt\").long(\"MINVAL\",\"MAXVAL\");", context); + + mailDs = (DataSet) engine + .execute("return readTxt(\"src/test/resources/mailCharge.txt\").long(\"MINVAL\",\"MAXVAL\");", context); context.put("mailDs", mailDs); - //拆分字段 - result = (DataSet) engine.execute("return mailDs.updateField(()->{d=new java.util.Date(); day=d.getDay(); hour=d.getHours(); },{\"day\",\"hour\"},null);",context); + // 拆分字段 + result = (DataSet) engine.execute( + "return mailDs.updateField(()->{d=new java.util.Date(); day=d.getDay(); hour=d.getHours(); },{\"day\",\"hour\"},null);", + context); assertEquals(7, result.getColumns()); } diff --git a/org.tinygroup.tinyscript/src/test/java/org/tinygroup/tinyscript/example/Example6Test.java b/org.tinygroup.tinyscript/src/test/java/org/tinygroup/tinyscript/example/Example6Test.java index d55af495eed4f21a262ef5ac60dea487ab945e14..a205a8b1047ff9313705782d9bb839af3e12c53a 100644 --- a/org.tinygroup.tinyscript/src/test/java/org/tinygroup/tinyscript/example/Example6Test.java +++ b/org.tinygroup.tinyscript/src/test/java/org/tinygroup/tinyscript/example/Example6Test.java @@ -28,213 +28,228 @@ import org.tinygroup.tinyscript.interpret.ScriptUtil; /** * 一个月内连续三天涨停的股票 + * * @author yancheng11334 * */ -public class Example6Test extends TestCase{ +public class Example6Test extends TestCase { + + private ScriptEngine engine; + private ScriptContext context; - private ScriptEngine engine ; - private ScriptContext context ; - protected void setUp() throws Exception { engine = new DefaultTinyScriptEngine(); context = new DefaultScriptContext(); - + String content = FileUtil.readFileContent(new File("src/test/resources/stock.tsf"), "utf-8"); ScriptSegment scriptSegment = ScriptUtil.getDefault().createScriptSegment(engine, null, content); engine.addScriptSegment(scriptSegment); } + /** * java为主 + * * @throws Exception */ - public void test6WithJava() throws Exception{ + public void test6WithJava() throws Exception { System.out.println("test6WithJava is start!"); - - //读取文件 + + // 读取文件 List values = readTxt("src/test/resources/StockRecords.txt"); - - //按股票分组 - Map> maps = new HashMap>(); - for(Stock stock:values){ + + // 按股票分组 + Map> maps = new HashMap>(); + for (Stock stock : values) { List stockList = maps.get(stock.getCode()); - if(stockList==null){ - stockList = new ArrayList(); - maps.put(stock.getCode(), stockList); + if (stockList == null) { + stockList = new ArrayList(); + maps.put(stock.getCode(), stockList); } stockList.add(stock); } - - //遍历每只股票 + + // 遍历每只股票 Comparator c = new StockComparator(); - for(List stockList:maps.values()){ + for (List stockList : maps.values()) { Collections.sort(stockList, c); - - //计算涨幅 + + // 计算涨幅 stockList.get(0).setUp(0d); - for(int i=1;i goodStocks = new ArrayList(); - for(List stockList:maps.values()){ - for(int i=2;i stockList : maps.values()) { + for (int i = 2; i < stockList.size(); i++) { + Stock s0 = stockList.get(i - 2); + Stock s1 = stockList.get(i - 1); Stock s2 = stockList.get(i); - if(s0.getUp()>radio && s1.getUp()>radio && s2.getUp()>radio){ + if (s0.getUp() > radio && s1.getUp() > radio && s2.getUp() > radio) { goodStocks.add(s0.getCode()); break; } } } - - //输出结果股票 - for(int i=0;i readTxt(String path) throws Exception{ + + private List readTxt(String path) throws Exception { BufferedReader reader = null; FileInputStream fis = null; - try{ + try { fis = new FileInputStream(path); - reader = new BufferedReader(new InputStreamReader(fis,"utf-8")); + reader = new BufferedReader(new InputStreamReader(fis, "utf-8")); List values = new ArrayList(); - //解析标题 - String line = reader.readLine(); - String[] fields = line.split("\t"); - - //解析字段 - while((line=reader.readLine())!=null){ + // 解析标题 + String line = reader.readLine(); + String[] fields = line.split("\t"); + + // 解析字段 + while ((line = reader.readLine()) != null) { String[] ss = line.split("\t"); - if(fields.length!=ss.length){ - throw new ScriptException(String.format("解析行记录[%s]失败:值个数与标题列个数不匹配", line)); + if (fields.length != ss.length) { + throw new ScriptException(String.format("解析行记录[%s]失败:值个数与标题列个数不匹配", line)); } values.add(new Stock(ss)); } return values; - - }finally{ - if(reader!=null){ - reader.close(); + + } finally { + if (reader != null) { + reader.close(); } - if(fis!=null){ - fis.close(); + if (fis != null) { + fis.close(); } } - + } - - class StockComparator implements Comparator{ + + class StockComparator implements Comparator { public int compare(Stock o1, Stock o2) { return o1.getDate().compareTo(o2.getDate()); } - + } - + class Stock { private String code; private double cl; private Date date; private double up; - - public Stock(String[] ss) throws Exception{ + + public Stock(String[] ss) throws Exception { code = ss[0]; date = convert(ss[1]); cl = Double.parseDouble(ss[2]); } - - private Date convert(String str) throws Exception{ + + private Date convert(String str) throws Exception { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return format.parse(str); } + public String getCode() { return code; } + public void setCode(String code) { this.code = code; } + public double getCl() { return cl; } + public void setCl(double cl) { this.cl = cl; } + public Date getDate() { return date; } + public void setDate(Date date) { this.date = date; } + public double getUp() { return up; } + public void setUp(double up) { this.up = up; } - + } - + /** * tiny脚本为主,进行运算 + * * @throws Exception */ - public void test6WithScript() throws Exception{ - + public void test6WithScript() throws Exception { + System.out.println("test6WithScript is start!"); - GroupDataSet groupDs = (GroupDataSet) engine.execute("m = new Example6(); return m.countStock(\"src/test/resources/StockRecords.txt\");", context); - //输出结果股票 - for(int i=0;i 0) { @@ -81,7 +80,7 @@ public abstract class AbstractDpKnapsackFunction extends DynamicNameScriptFuncti int nCount = Math.min(maxCount[i], v / weight[i]); for (int k = 0; k <= nCount; k++) { if (context != null) { - context.put("i", i); + context.put("i", ((Boolean)context.get("isIndexFromOne"))?i:i-1); context.put("v", v); context.put("k", k); }