- 
                Notifications
    You must be signed in to change notification settings 
- Fork 127
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)- Principles
- Coding
- Data types
- Standalone shell
- Integration
- Customization
- More scripting API
- FAQ