Как обратиться к «Выбор элемента массива 2: индекс не находится в диапазоне от 1 до 1»? - PullRequest
0 голосов
/ 01 февраля 2019

Я настраиваю программу, в которой она будет читать csv-файл из каталога и загружать его в таблицуoplesoft.

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 голосов
/ 04 февраля 2019

Я не уверен, но вам может потребоваться создать экземпляр массива, либо с помощью CreateArray() или CreateArrayRept().Одним из вариантов может быть создание пустого массива String с использованием CreateArrayRept("",0);.Тогда, возможно, функция Split () сможет заполнить массив.

Local array of string &Columns_array;

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

Хотя я не совсем уверен, как это будет работать с циклом.Возможно, вам потребуется повторно инициализировать для каждой итерации или использовать другой метод массива, например .shift, чтобы вернуть значения для оператора вставки и оставить массив пустым.

Все сказанное, я согласен с комментарием об использовании файловых макетов для такого типа вещей.Они хорошо работают для чтения в плоских файлах.

...