我正在设置一个程序,其中该程序将从目录中读取一个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
答案 0 :(得分:0)
我不是很肯定,但是您可能需要使用CreateArray()
或CreateArrayRept()
实例化数组。一种选择是使用CreateArrayRept("",0);
创建一个空的String数组。然后,也许Split()函数将能够填充数组。
Local array of string &Columns_array;
&Columns_array=CreateArrayRept("",0);
&Columns_array = Split(&RowSetid, ",");
不过,我不确定该如何在循环中工作。您可能需要为每次迭代重新初始化,或者使用其他数组方法(如.shift
)来返回insert语句的值,并将数组留空。
所有这些,我同意关于将文件布局用于这种类型的事情的评论。它们非常适合读取平面文件。