From 335852e61af05da07028c562a12202bf5743fa91 Mon Sep 17 00:00:00 2001 From: fujie <405295521@qq.com> Date: Sat, 11 Nov 2017 15:12:56 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9F=90=E4=BA=9B?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E5=9C=A8=E4=B8=8B=E8=A1=A8=E4=B8=BA0?= =?UTF-8?q?=E6=97=B6=E7=9A=84=E8=B6=8A=E7=95=8C=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractDataSetOperateFunction.java | 12 +- .../function/DataSetFieldFunction.java | 3 +- .../function/DataSetIntersectionFunction.java | 4 +- .../function/DataSetKnapsackFunction.java | 8 +- .../function/DataSetSubtractFunction.java | 2 +- .../function/DataSetToBeanListFunction.java | 7 +- .../function/DataSetUnionFunction.java | 2 +- .../function/DataSetUpdateFieldFunction.java | 178 ++++++++-------- .../dataset/function/DataSetXorFunction.java | 2 +- .../tinyscript/dataset/impl/DataSetBean.java | 10 +- .../dataset/impl/SimpleDataSet.java | 4 +- .../DataSetColumnItemProcessor.java | 42 ++-- .../tinyscript/dataset/util/DataSetUtil.java | 10 +- .../text/function/ReadTxtFunction.java | 2 +- .../org/tinygroup/tinyscript/ReplaceTest.java | 32 +-- .../org/tinygroup/tinyscript/RowTest.java | 30 +-- .../org/tinygroup/tinyscript/UpdateTest.java | 52 +++-- .../tinyscript/example/Example6Test.java | 201 ++++++++++-------- .../test/resources/dataSetExample/sort.tsf | 8 + .../resources/dataSetExample/sortExample.txt | 6 + .../function/AbstractDpKnapsackFunction.java | 3 +- .../function/AbstractSortFunction.java | 201 ++++++++++-------- 22 files changed, 444 insertions(+), 375 deletions(-) create mode 100644 org.tinygroup.tinyscript/src/test/resources/dataSetExample/sort.tsf create mode 100644 org.tinygroup.tinyscript/src/test/resources/dataSetExample/sortExample.txt 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 c5abb6a..09e129d 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 28c5f23..fb30e82 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 d47ab95..329d912 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 554bf3c..8a807b9 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 09781fa..091eaf6 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 fa387eb..9ea3694 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 6fc5933..ae0daba 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 56aea9b..e597c5a 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 5decc1c..d2aec6b 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 dbfbb10..ab34da7 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 75dd805..88a9fe2 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 0a13043..bd78d31 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 55841a0..1ff65b6 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 d55af49..a205a8b 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{ + return a[0]>b[0]?1:a[0]==b[0]?0:-1; +})); +println([6,2,3].sort());//默认asc排序 +println([6,2,3].sort("desc")); \ No newline at end of file diff --git a/org.tinygroup.tinyscript/src/test/resources/dataSetExample/sortExample.txt b/org.tinygroup.tinyscript/src/test/resources/dataSetExample/sortExample.txt new file mode 100644 index 0000000..e79ced2 --- /dev/null +++ b/org.tinygroup.tinyscript/src/test/resources/dataSetExample/sortExample.txt @@ -0,0 +1,6 @@ +n-ame w_eight value count +a 2 6 1 +b 2 3 1 +c 6 5 1 +e 4 6 1 +d 5 4 1 diff --git a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/AbstractDpKnapsackFunction.java b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/AbstractDpKnapsackFunction.java index 620a16d..2554ba7 100644 --- a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/AbstractDpKnapsackFunction.java +++ b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/AbstractDpKnapsackFunction.java @@ -60,7 +60,6 @@ public abstract class AbstractDpKnapsackFunction extends DynamicNameScriptFuncti */ private void dpKnapsackResult(double result[][], int types, int bagSize, int[] weight, int[] maxCount, double value[], Object... parameters) throws Exception { - ScriptContext context = null; LambdaFunction pruneFunction = null; if (parameters.length > 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); } diff --git a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/AbstractSortFunction.java b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/AbstractSortFunction.java index 827aeb0..b0c23f5 100644 --- a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/AbstractSortFunction.java +++ b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/AbstractSortFunction.java @@ -15,60 +15,64 @@ import org.tinygroup.tinyscript.interpret.anonymous.SingleMethodProcessor; /** * 排序入口函数 + * * @author yancheng11334 * */ -@SuppressWarnings({"rawtypes","unchecked"}) +@SuppressWarnings({ "rawtypes", "unchecked" }) public abstract class AbstractSortFunction extends AbstractScriptFunction { private static final Pattern ORDER_SIMPLE = Pattern.compile("\\s*(asc|desc)\\s*", Pattern.CASE_INSENSITIVE); - - private static final String SPACE = "\\s*"; - private static final String FIELD = "[_a-zA-Z\u4E00-\u9FA5]*"; - private static final String ORDER = "(asc|desc)?"; - private static final Pattern ORDER_FIELD = Pattern.compile(SPACE+FIELD+SPACE+ORDER+"("+SPACE+","+FIELD+SPACE+ORDER+")*", Pattern.CASE_INSENSITIVE); - + + private static final String SPACE = "\\s*"; + private static final String FIELD = ".+"; + private static final String ORDER = "(asc|desc)?"; + private static final Pattern ORDER_FIELD = Pattern.compile( + SPACE + FIELD + SPACE + ORDER + "(" + SPACE + "," + FIELD + SPACE + ORDER + ")*", Pattern.CASE_INSENSITIVE); + private Comparator asc = new SimpleTypeComparator(true); private Comparator desc = new SimpleTypeComparator(false); - protected static final String DEFAULT_CONTEXT_NAME = "_tiny_list_ele"; - + protected static final String DEFAULT_CONTEXT_NAME = "_tiny_list_ele"; + public String getNames() { return "sort"; } - - public Object execute(ScriptSegment segment, ScriptContext context, - Object... parameters) throws ScriptException { - if(parameters==null || parameters.length==0){ - throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.empty", getNames())); - }else if(checkParameters(parameters, 2)){ - try{ - if(parameters[1] instanceof String){ - return sort(segment,context,parameters[0],(String)parameters[1]); - }else if(parameters[1] instanceof LambdaFunction){ - //通过lambda表达式进行排序 + + public Object execute(ScriptSegment segment, ScriptContext context, Object... parameters) throws ScriptException { + if (parameters == null || parameters.length == 0) { + throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.empty", getNames())); + } else if (checkParameters(parameters, 1)) { + return sort(segment, context, parameters[0], "asc"); + } else if (checkParameters(parameters, 2)) { + try { + if (parameters[1] instanceof String) { + return sort(segment, context, parameters[0], (String) parameters[1]); + } else if (parameters[1] instanceof LambdaFunction) { + // 通过lambda表达式进行排序 LambdaFunction lambdaFunction = (LambdaFunction) parameters[1]; SingleMethodProcessor processor = ClassInstanceUtil.findSingleMethodProcessor(Comparator.class); Comparator c = (Comparator) processor.build(lambdaFunction, context); - return sortByLambda(parameters[0],c); + return sortByLambda(parameters[0], c); } - }catch(Exception e){ - throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.run.error", getNames()),e); + } catch (Exception e) { + throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.run.error", getNames()), e); } - + } - throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.error", getNames())); + throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.error", getNames())); } - - protected boolean matchSimpleRule(String rule){ + + protected boolean matchSimpleRule(String rule) { return ORDER_SIMPLE.matcher(rule).matches(); } - - protected boolean matchFieldRule(String rule){ + + protected boolean matchFieldRule(String rule) { return ORDER_FIELD.matcher(rule).matches(); } - + /** * 排序 + * * @param segment * @param context * @param obj @@ -76,75 +80,79 @@ public abstract class AbstractSortFunction extends AbstractScriptFunction { * @return * @throws ScriptException */ - protected abstract Object sort(ScriptSegment segment, ScriptContext context,Object obj,String rule) throws ScriptException; - + protected abstract Object sort(ScriptSegment segment, ScriptContext context, Object obj, String rule) + throws ScriptException; + /** * 获取比较器 + * * @param rule * @param segment * @param source * @return * @throws Exception */ - public Comparator getComparator(String rule,ScriptSegment segment,Object source) throws Exception{ - //匹配简单规则 - if(matchSimpleRule(rule)){ + public Comparator getComparator(String rule, ScriptSegment segment, Object source) throws Exception { + // 匹配简单规则 + if (matchSimpleRule(rule)) { String runRule = rule.toLowerCase(); - if(runRule.indexOf("asc")>-1){ - return asc; - }else{ - return desc; + if (runRule.indexOf("desc") > -1) { + return desc; + } else { + return asc; } } - //进行字段匹配 - return createComparator(rule,segment,source); + // 进行字段匹配 + return createComparator(rule, segment, source); } - + /** * 通过lambda函数进行排序 + * * @param sortObject * @param c * @return * @throws Exception */ - protected abstract Object sortByLambda(Object sortObject,Comparator c) throws Exception; - + protected abstract Object sortByLambda(Object sortObject, Comparator c) throws Exception; + /** * 创建比较器 + * * @param rule * @param segment * @param source * @return * @throws Exception */ - protected abstract Comparator createComparator(String rule,ScriptSegment segment,Object source) throws Exception; - + protected abstract Comparator createComparator(String rule, ScriptSegment segment, Object source) throws Exception; + @SuppressWarnings("hiding") - class SimpleTypeComparator implements Comparator{ + class SimpleTypeComparator implements Comparator { private boolean asc; - - public SimpleTypeComparator(boolean ascTag){ + + public SimpleTypeComparator(boolean ascTag) { this.asc = ascTag; } - + public int compare(Object o2, Object o1) { - if(asc){ - return compareObject(o2,o1); //升序 - }else{ - return compareObject(o1,o2); //降序 + if (asc) { + return compareObject(o2, o1); // 升序 + } else { + return compareObject(o1, o2); // 降序 } } - - protected int compareObject(Object o1, Object o2){ - if(o1 instanceof Comparable && o2 instanceof Comparable){ + + protected int compareObject(Object o1, Object o2) { + if (o1 instanceof Comparable && o2 instanceof Comparable) { Comparable c1 = (Comparable) o1; Comparable c2 = (Comparable) o2; return c1.compareTo(c2); - }else{ + } else { String s1 = o1.toString(); String s2 = o2.toString(); - return s1.compareTo(s2); + return s1.compareTo(s2); } } @@ -155,38 +163,46 @@ public abstract class AbstractSortFunction extends AbstractScriptFunction { private String contextName; private String segment; private int index; + public boolean isAsc() { return asc; } + public void setAsc(boolean asc) { this.asc = asc; } + public String getContextName() { return contextName; } + public void setContextName(String contextName) { this.contextName = contextName; } + public String getSegment() { return segment; } + public void setSegment(String segment) { this.segment = segment; } + public int getIndex() { return index; } + public void setIndex(int index) { this.index = index; } } - - @SuppressWarnings("hiding") - public class FieldSortComparator implements Comparator{ + + @SuppressWarnings("hiding") + public class FieldSortComparator implements Comparator { private List fieldSortRuleList; private ScriptContext context = new DefaultScriptContext(); - + public List getFieldSortRuleList() { return fieldSortRuleList; } @@ -197,52 +213,53 @@ public abstract class AbstractSortFunction extends AbstractScriptFunction { public int compare(Object o1, Object o2) { int compareValue = 0; - try{ - for(FieldSortRule rule:fieldSortRuleList){ - Object p1 = eval(rule,o1); - Object p2 = eval(rule,o2); - if(rule.isAsc()){ - //升序 - compareValue = compareObject(p1,p2); - }else{ - //降序 - compareValue = compareObject(p2,p1); + try { + for (FieldSortRule rule : fieldSortRuleList) { + Object p1 = eval(rule, o1); + Object p2 = eval(rule, o2); + if (rule.isAsc()) { + // 升序 + compareValue = compareObject(p1, p2); + } else { + // 降序 + compareValue = compareObject(p2, p1); } - //某个字段比较出结果,直接返回;否则继续 - if(compareValue!=0){ - return compareValue; + // 某个字段比较出结果,直接返回;否则继续 + if (compareValue != 0) { + return compareValue; } } - }catch(RuntimeException e){ - throw e; - }catch(Exception e){ - throw new RuntimeException(ResourceBundleUtil.getDefaultMessage("function.run.error", getNames()),e); - } - + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(ResourceBundleUtil.getDefaultMessage("function.run.error", getNames()), e); + } + return compareValue; } - - private Object eval(FieldSortRule rule,Object obj){ + + private Object eval(FieldSortRule rule, Object obj) { context.put(rule.getContextName(), obj); try { - return (Object)AbstractSortFunction.this.getScriptEngine().execute(rule.getSegment(), context); + return (Object) AbstractSortFunction.this.getScriptEngine().execute(rule.getSegment(), context); } catch (ScriptException e) { - throw new RuntimeException(ResourceBundleUtil.getDefaultMessage("function.scirpt.error", getNames(),rule.getSegment()),e); + throw new RuntimeException( + ResourceBundleUtil.getDefaultMessage("function.scirpt.error", getNames(), rule.getSegment()), + e); } } - - protected int compareObject(Object p1, Object p2){ - if(p1 instanceof Comparable && p2 instanceof Comparable){ + + protected int compareObject(Object p1, Object p2) { + if (p1 instanceof Comparable && p2 instanceof Comparable) { Comparable c1 = (Comparable) p1; Comparable c2 = (Comparable) p2; return c1.compareTo(c2); - }else{ + } else { String s1 = p1.toString(); String s2 = p2.toString(); - return s1.compareTo(s2); + return s1.compareTo(s2); } } } - } -- Gitee From 8e63cb17d509707e34880ad904b25cf983a0abe9 Mon Sep 17 00:00:00 2001 From: fujie <405295521@qq.com> Date: Sun, 12 Nov 2017 14:14:25 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E9=BB=98=E8=AE=A4indexfromone=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E4=BB=8E=E5=BC=95=E6=93=8E=E4=B8=AD=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/tinygroup/tinyscript/text/function/ReadTxtFunction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org.tinygroup.tinyscript.text/src/main/java/org/tinygroup/tinyscript/text/function/ReadTxtFunction.java b/org.tinygroup.tinyscript.text/src/main/java/org/tinygroup/tinyscript/text/function/ReadTxtFunction.java index 7c91d59..c2154a3 100644 --- a/org.tinygroup.tinyscript.text/src/main/java/org/tinygroup/tinyscript/text/function/ReadTxtFunction.java +++ b/org.tinygroup.tinyscript.text/src/main/java/org/tinygroup/tinyscript/text/function/ReadTxtFunction.java @@ -89,7 +89,7 @@ public class ReadTxtFunction extends AbstractScriptFunction { } // 返回数据集 - return DataSetUtil.createDynamicDataSet(fields, dataArray, false); + return DataSetUtil.createDynamicDataSet(fields, dataArray, getScriptEngine().isIndexFromOne()); } finally { if (fileObject != null) { fileObject.clean(); -- Gitee