Как обратиться к "Выбор элемента массива 2: индекс не находится в диапазоне от 1 до 1"?

Я устанавливаю программу, в которой он будет читать 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 ответ

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

Local array of string &Columns_array;

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

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

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

Другие вопросы по тегам