在处理行列比较明显的CSV数据转换时,将数据装载到grid内再循环处理不失为一个好的方法。
1. 数据文件样本
2. 脚本
2.1)装载到grid 脚本,Field_Name: Grid
TRIM QUOTES | 去除数据文件前后引号 | |
TRIM SELECTION | 去除数据文件前后空格 | |
SET VARIABLE | SRowCnt="0" | |
SET VARIABLE | Index="0" | |
MOVE LINES | 1 | 下移一行 |
SET BOOKMARK | START | 在第2行行首设START标签 |
BOOKMARK:SET AT END | End | 在数据文件结尾处设一个End 的Bookmark |
SET VARIABLE | Var=CopyBetweenBookmarks(Start,End) | 获取数据赋值给Var,(第2行到最后一行) |
SET VARIABLE | Var=RemoveChars(Var,"""") | |
GRID BUILD GRID FROM CSV STRING | SampGrid,Var,False,<COMMA> | 根据Var构建Grid:SampGird,分隔符是逗号 |
SET VARIABLE | rowcount=GetRowCount(SampGrid) | |
CREATE GRID | resGrid,5,0 | |
REPEAT LOOP | rowcount | |
SET VARIABLE | ID=GetCell(SampGrid,1,SRowCnt) | GRID第2列为TEST_ID |
SET VARIABLE | ResName="Weight" | |
SET VARIABLE | Result=GetCell(SampGrid,2,SRowCnt) | |
SET VARIABLE | Result =TrimCharsBeforeText(Result,D,TRUE) | |
SET VARIABLE | Result =TrimCharsBeforeText(Result,N,TRUE) | |
SET VARIABLE | Result =TrimChars(Result,<SPACE>) | |
SET VARIABLE | Result = TrimCharsAfterText(Result,<SPACE>,TRUE) | |
SET VARIABLE | ResName1=ResName | |
IF | AreNotEqual(ID,"") | |
GRID ADD EMPTY ROWS | ResGrid,1 | |
GRID SET CELL VALUE | ResGrid,SampleCol,Index,ID | |
GRID SET CELL VALUE | ResGrid,TestNumCol,Index,ID | |
GRID SET CELL VALUE | ResGrid,ResNameCol,Index,ResName | |
GRID SET CELL VALUE | ResGrid,ResultCol,Index,Result | |
SET VARIABLE | Index=Add(Index,1) | |
SET VARIABLE | SRowCnt=Add(SRowCnt,1) | |
ELSE | ||
SET VARIABLE | SRowCnt=Add(SRowCnt,1) | |
END IF | ||
END LOOP | ||
SET VARIABLE | ResCnt=GetRowCount(ResGrid) | |
2.2) Grid 转到xml 输出Field_Name: Build Nodes
SET VARIABLE | TotNode="0" | |
SET VARIABLE | NodeTemplate="<result test_id="?TESTNUM?" result_name="?RN?" >?RES?</result>" | |
SET VARIABLE | Index="0" | |
REPEAT LOOP | ResCnt | |
SET VARIABLE | Node=NodeTemplate | |
SET VARIABLE | Value=GetCell(ResGrid,TestNumCol,Index) | |
SET VARIABLE | Test_Value=Value | |
SET VARIABLE | Node=Replace(Node,?TESTNUM?,Value) | |
SET VARIABLE | Value=GetCell(ResGrid,ResNameCol,Index) | |
SET VARIABLE | ReName=Value | |
SET VARIABLE | Node=Replace(Node,?RN?,Value) | |
SET VARIABLE | RValue=GetCell(ResGrid,ResultCol,Index) | |
SET VARIABLE | RValue = TrimCharsBeforeText(RValue, <SPACE>, TRUE) | |
SET VARIABLE | RValue = TrimCharsAfterText(RValue, <SPACE>, TRUE) | |
SET VARIABLE | zero="1" | |
IF | IsLess(RValue,zero) | |
SET VARIABLE | RValue="0" | |
END IF | ||
SET VARIABLE | CompVal=RValue | |
SET VARIBALE | Node=Replace(Node,?RES?,RValue) | |
IF | IsNotEmpty(RValue) | |
IF | IsNumeric(Test_Value) | |
CLONE NODE | Node | |
END IF | ||
END IF | ||
SET VARIABLE | Index=Add(1,Index) | |
END LOOP | ||
THROW HARD EXCEPTION | AreEqual(TotNode,"0"),"No Data to Send" |