Опубликован: 22.12.2015 | Уровень: для всех | Доступ: платный
Лекция 8:

Структура строк 'Eina_Strbuf'

< Лекция 7 || Лекция 8 || Лекция 9 >

Вставка строки в 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 (шестой символ).


< Лекция 7 || Лекция 8 || Лекция 9 >