Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Manipulating an array

Wang Renxin edited this page May 31, 2022 · 3 revisions

Array index in MY-BASIC starts from 0, which is a little different from some other BASIC dialects.

MY-BASIC offers several array manipulation functions to create array dynamically, besides defining with a DIM statement. A BASIC defined array variable is not re-assignable, but a dynamically created one is not limited by it. Simply speaking, array is either "DIMed" or dynamically "created".

Use mb_init_array to initialize an array; mb_get_array_len to get the rank value of a dimension; mb_get_array_elem to get the value of an element; mb_set_array_elem to set the value of an element. For example assume a string SPLIT interface as follow using all these functions:

static int _split(struct mb_interpreter_t* s, void** l) {
	int result = MB_FUNC_OK;
	char* arg = 0;
	char* ch = 0;
	char* part = 0;
	int c = 0;
	void* arr = 0;
	int d[1] = { 0 };
	int i = 0;
	char** parts = 0;
	int count = 0;
	mb_value_t val;

	mb_assert(s && l);

	mb_check(mb_attempt_open_bracket(s, l));

	mb_check(mb_pop_string(s, l, &arg));
	mb_check(mb_pop_string(s, l, &ch));

	mb_check(mb_attempt_close_bracket(s, l));

	arg = strdup(arg);
	part = strtok(arg, ch);
	while(part) {
		if(++c >= count) {
			parts = (char**)realloc(parts, c * sizeof(char*));
			count = c;
		}
		parts[c - 1] = part;
		part = strtok(0, ch);
	}

	d[0] = c;
	mb_init_array(s, l, MB_DT_STRING, d, 1, &arr);
	for(i = 0; i < count; i++) {
		val.type = MB_DT_STRING;
		val.value.string = parts[i];
		d[0] = i;
		mb_set_array_elem(s, l, arr, d, 1, val);
	}
	val.type = MB_DT_ARRAY;
	val.value.array = arr;
	mb_check(mb_push_value(s, l, val));
	free(parts);
	free(arg);

	return result;
}

Then it's possible to use it as:

s$ = "123,456,789"
a$ = split(s$, ",")
print a$(0), a$(1), a$(2)

Clone this wiki locally

Morty Proxy This is a proxified and sanitized view of the page, visit original site.