如何解决“获取数组元素2:索引不在1到1的范围内”?

时间:2019-02-01 08:30:18

标签: peoplecode

我正在设置一个程序,其中该程序将从目录中读取一个csv文件,并将其加载到peoplesoft表中。

Local SQL &SQL;
Local File &FileSetid;
Local array of string &Columns_array;
Local string &RowSetid;

&FileSetid = GetFile("\\CBRTPWDAPU218\psoft\fspsdev\custhome\sqr\testdata.csv", "R", %FilePath_Absolute);

If &FileSetid.IsOpen Then
   While &FileSetid.ReadLine(&RowSetid);
      &Columns_array = Split(&RowSetid, ",");
      SQLExec("INSERT INTO PS_FT_TRN_ITEM_CLM (BUSINESS_UNIT, CUST_ID, ITEM, ENTRY_TYPE, ENTRY_REASON) VALUES (:1,:2,:3,:4,:5)", &Columns_array [1], &Columns_array [2], &Columns_array [3], &Columns_array [4], &Columns_array [5]);

   End-While;
End-If;

我收到“正在获取数组元素2:索引不在1到1的范围内”。

我输入的文件包含以下内容:

BUSINESS_UNIT,CUST_ID,ITEM,ENTRY_TYPE,ENTRY_REASON 10000,ARTEST,ITEM01,NEW,NEW

1 个答案:

答案 0 :(得分:0)

我不是很肯定,但是您可能需要使用CreateArray()CreateArrayRept()实例化数组。一种选择是使用CreateArrayRept("",0);创建一个空的String数组。然后,也许Split()函数将能够填充数组。

Local array of string &Columns_array;

&Columns_array=CreateArrayRept("",0);
&Columns_array = Split(&RowSetid, ",");

不过,我不确定该如何在循环中工作。您可能需要为每次迭代重新初始化,或者使用其他数组方法(如.shift)来返回insert语句的值,并将数组留空。

所有这些,我同意关于将文件布局用于这种类型的事情的评论。它们非常适合读取平面文件。