0

我正在设置一个程序,它将从目录中读取 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

4

1 回答 1

0

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

Local array of string &Columns_array;

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

不过,我不确定这将如何与循环一起使用。您可能需要为每次迭代重新初始化,或者使用其他数组方法,例如.shift返回插入语句的值并将数组留空。

综上所述,我确实同意关于将文件布局用于此类事情的评论。它们非常适合阅读平面文件。

于 2019-02-04T17:32:34.493 回答