Помощь - Поиск - Пользователи - Календарь
Полная версия: Считать информацию из строки
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
*оля*
здравствуйте. подскажите пожалуйста... Вот, к примеру, мы считываем строку вот так:

 sscanf(str, "%s %s %s %d", value.nomer, value.name, value.kinokomp, &value.prodol);


однако так правильно считывет, если все задано по одному слову.
а если value.kinokomp задано несколькими словами, заключенными в скобки, то как быть?

спасибо)
IUnknown
Цитата
а если value.kinokomp задано несколькими словами, заключенными в скобки, то как быть?

Пользуемся мало кому известными возможностями ...scanf - возможностью работать с регулярными выражениями и возвращаемым значением. С их помощью задача решается в 2 строки:

    if(sscanf(str, "%s%20[^(](%20[^)])%d",
value.nomer, value.name, value.kinokomp, &value.prodol) != 4)
{
sscanf(str, "%s%s%s%d",
value.nomer, value.name, value.kinokomp, &value.prodol);
}
, т.е., сначала пытаемся распарсить строку с учетом того, что value.kinokomp заключен в круглые скобки. Проверяем, сколько полей было заполнено успешно. Если не все 4 - то скобок не было, читаем, как обычно. Если 4 - то нам повезло, строка была со скобками, и была сразу корректно разобрана, второй проход делать не надо.

Немного о "магических" числах. Я имею в виду, 20-ку. Это максимальное количество символов, которое может поместиться в соотв. строку. То есть, я для теста задал структуру так:

struct s
{
char nomer[21];
char name[21];
char kinokomp[21];
int prodol;
};

, поэтому могу в каждое строковое поле читать не больше 20 символов. Если у тебя описано по другому - задавай другое значение в форматной строке...
*оля*
хм....никогда не встречалась с таким, теперь буду знать!)) спасибо большое)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.