Структура строк 'Eina_Strbuf'
Вставка строки в Eina_Strbuf
Иногда вы чувствуете себя так, как будто вы зашли в тупик, используя API, написанные на C. EFL предлагает структуру для работы со строками, известную, как ‘Eina_Strbuf.’ В этом примере мы поговорим о том, как удалить часть строки, преобразовать одну строку в другую строку, а также вставить одну строку в середину другой строки.
Создайте новый проект 'EinaStrbufSample.' Откройте файл исходного кода и добавьте код в функцию create_base_gui().
/* Label*/ ad->label = elm_label_add(ad->conform); elm_object_text_set(ad->label, "Eina String Structure"); evas_object_size_hint_weight_set(ad->label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_object_content_set(ad->conform, ad->label); elm_label_line_wrap_set(ad->label, EINA_TRUE); /* Show window after base gui is set up */ evas_object_show(ad->win); show_eina_strbuf_result(ad->label);
elm_label_line_wrap_set() - это API, который определяет автоматическую упаковку строк в метке.
show_eina_strbuf_result() - это функция, которая отображает результат использования Eina_Strbuf на экране. Добавьте функцию выше create_base_gui().
static void show_eina_strbuf_result(Evas_Object *label) { Eina_Strbuf *strline, *strbuf; /* Create Eina_Strbuf */ strbuf = eina_strbuf_new(); /* Addend string */ eina_strbuf_append(strbuf, "Eina String Structure"); elm_object_text_set(label, eina_strbuf_string_get(strbuf)); /* Free memory */ eina_strbuf_free(strbuf); }
eina_strbuf_new() - это API, который создает новый объект Eina_Strbuf.
eina_strbuf_append() - это API, который добавляет строку к Eina_Strbuf.
eina_strbuf_string_get() - это API, который запрашивает строку, сохраненную в Eina_Strbuf.
eina_strbuf_free() is an API that deletes the data stored in Eina_Strbuf.
Запустим пример.
Добавление строки в особом формате
Для того, чтобы добавить строку в особом формате вам потребуется использовать функцию eina_strbuf_append_printf(). Добавьте код в середину функции show_eina_strbuf_result().
eina_strbuf_append(strbuf, "Eina String Structure"); /* Reset string */ strline = eina_strbuf_new(); eina_strbuf_append(strline, "Append string"); eina_strbuf_append_printf(strbuf, "<br>%s", eina_strbuf_string_get(strline) ); elm_object_text_set(label, eina_strbuf_string_get(strbuf)); /* Free memory */ eina_strbuf_free(strline); eina_strbuf_free(strbuf);
Мы создали новый объект Eina_Strbuf с помощью функции eina_strbuf_new() и ввели строку с помощью функции eina_strbuf_append().
eina_strbuf_append_printf() - это API, который добавляет новую строку за счет определения выражения, описывающего формат. Первый параметр показывает объект Eina_Strbuf object, второй параметр показывает тип формата, а третий параметр и более поздние параметры показывают данные, которые должны быть связаны с этим форматом.
Запустите пример. Отображаются две строки.
Запрос длины строки
Для запроса длины строки, сохраненной в объекте Eina_Strbuf, вам потребуется воспользоваться функцией eina_strbuf_length_get(). Добавьте код в конец функции show_eina_strbuf_result().
eina_strbuf_append_printf(strbuf, "<br>%s", eina_strbuf_string_get(strline)); /* Length of string */ eina_strbuf_append_printf(strbuf, "<br>Length : %d", eina_strbuf_length_get(strline)); elm_object_text_set(label, eina_strbuf_string_get(strbuf));
eina_strbuf_length_get() - это API, который возвращает длину строки, сохраненной в объекте Eina_Strbuf.
Запустите проект. На экране отобразится число 13.
Удаление части строки
Для удаления части строки вы должны использовать функцию eina_strbuf_remove(). Добавьте код в конец функции show_eina_strbuf_result().
eina_strbuf_append_printf(strbuf, "<br>Length : %d", eina_strbuf_length_get(strline)); /* Remove part of string */ eina_strbuf_remove(strline, 3, 6); eina_strbuf_append_printf(strbuf, "<br>%s", eina_strbuf_string_get(strline)); elm_object_text_set(label, eina_strbuf_string_get(strbuf));
eina_strbuf_remove() - это API, который удаляет часть строки. Первый параметр показывает объект Eina_Strbuf, второй параметр — начальную позицию удаления, а третий параметр — конечная позиция удаления. Например, введя ‘6’ мы удалим все символы до шестого.
Запустите пример снова. Символы с индексами с 3 по 5 (символы с четвертого по шестой) удалены.
Замена строк
Для замены одной строки другой строкой вы должны воспользоваться функцией eina_strbuf_replace(). Добавьте код в конец функции show_eina_strbuf_result().
eina_strbuf_append_printf(strbuf, "<br>%s", eina_strbuf_string_get(strline) ); /* Replace string */ eina_strbuf_reset(strline); eina_strbuf_append(strline, "I () () the ()"); eina_strbuf_replace(strline, "()", "can", 1); eina_strbuf_append_printf(strbuf, "<br>%s", eina_strbuf_string_get(strline)); elm_object_text_set(label, eina_strbuf_string_get(strbuf));
eina_strbuf_reset() - это API, который сбрасывает строки, сохраненные в объекте Eina_Strbuf.
eina_strbuf_replace() - это функция, которая преобразует одну строку в другую.
Запустите пример. Первые символы '()' заменяются на 'can.'
Замена всех идентичных строк
В этом примере мы поговорим о том, как заменить все идентичные строки. Добавьте код в конец функции show_eina_strbuf_result().
eina_strbuf_append_printf(strbuf, "<br>%s", eina_strbuf_string_get(strline)); /* Replace all */ eina_strbuf_replace_all(strline, "()", "can"); eina_strbuf_append_printf(strbuf, "<br>%s", eina_strbuf_string_get(strline)); elm_object_text_set(label, eina_strbuf_string_get(strbuf));
eina_strbuf_replace_all() - это API, который заменяет все идентичные строки.
Запустите пример снова. Все символы ‘()’ заменены на ‘can.’
Вставка одной строки в середину другой строки
Добавьте код в конец функции show_eina_strbuf_result().
eina_strbuf_append_printf(strbuf, "<br>%s", eina_strbuf_string_get(strline)); /* Insert string */ eina_strbuf_insert(strline, " not", 5); eina_strbuf_append_printf(strbuf, "<br>%s", eina_strbuf_string_get(strline)); elm_object_text_set(label, eina_strbuf_string_get(strbuf));
eina_strbuf_insert() - это API, который вставляет строку в заданное положение другой строки.
Запустите пример. Строка 'not' вставлена по индексу 5 (шестой символ).