D3 Reference Manual

Index | Help

Поиск по страницам

Разделы / С-функции / _CP_select

_CP_select

select (функциональность оператора FlashBASIC)

int _CP_select(int expression1, int* list, int expression2)

Эта функция эквивалентна следующему оператору FlashBASIC:

select expression1 to list

Если выражение "expression2" не равно нулю, предполагаеся "вторичный" список.

По умолчанию функция "_CP_select" создает внутренний список, содержащий ключи записей файла, на который указывает "expression1". Выражение "expression1" должно быть ранее задано вызовом "_CP_open".

Следует, однако, отметить, что как и в FlashBASIC, если имеется внешний список (cозданный, например, предшествующим вызовом "_CP_execute"), значение "expression1" игнорируется. В этом случае, если требуется, пользователь может указать "-1" в качестве "expression1".

В случае ошибки функция возвращает "-1". Код ошибки содержится в "_CP_errno".

Пользовательская программа на C всегда должна либо обрабатывать все записи из списка, либо вызвать _CP_clearselect для преждевременного выхода из списка. Игнорирование этого правила может привести к чрезмерному расходу памяти или области переполнения.

Примеры:

Следующий пример печатает имена записий в "myfile".

CPSTR * n = _CP_mkstr("myfile");
CPSTR * id = _CP_str_null;
int sl = -1;
int f = -1;
_CP_open(&f, _CP_str_null, n);
_CP_select(f, &sl, 0);
while (_CP_readnext(&id, &sl, (int*) 0, 0) >= 0)
    _CP_print(id);

Следующий пример показывает, как внешний список отменяет файловую переменную, переданную как "expression1". Здесь "myfile" передается в "select", но "readnext" возвращает записи из "md".

CPSTR * n = _CP_mkstr("myfile");
CPSTR * s = _CP_mkstr("select md sampling 3");
CPSTR * id = _CP_str_null;
int sl = -1;
int f = -1;
_CP_execute(_CP_EXECUTE, s, (CPSTR**) 0, (CPSTR**) 0);
_CP_open(&f, _CP_str_null, n);
_CP_select(f, &sl, 0);
while (_CP_readnext(&id, &sl, (int*) 0, 0) >= 0)
    _CP_print(id);