Как обратиться к "Выбор элемента массива 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
чтобы вернуть значения для вашего оператора вставки и оставить массив пустым.
Все, что сказал, я согласен с комментарием об использовании файловых макетов для такого типа вещей. Они хорошо работают для чтения в плоских файлах.