![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| ReGeDiT |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
в файле имеется много строк вида
в них надо выцепить "msg [xxxx]" я делаю так:
но не работает. в чём проблема? З.Ы. Тип остальных неважен, будь то string или int. Важен только тип msg... |
||||
|
|||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
если надо выцепить text1, text2 и т.д. я бы сделал (если соблюдать ваш стиль
Это сообщение отредактировал(а) zkv - 23.8.2006, 13:38 |
|||
|
||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
да, забыл добавить... там в файле ещё помимо этих строк куча мусора +)
и т.п. =) поэтому тут банальным fscanf нельзя =( Это сообщение отредактировал(а) ReGeDiT - 23.8.2006, 13:40 |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
а std::fstream и std::string использовать нельзя? string в этом плане (поиск подстрок) довольно мощный инструмент
std::string s; s.find s.find_first_not_of s.find_first_of s.find_last_not_of s.find_last_of |
|||
|
||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
а это C++... а у меня C
|
|||
|
||||
| ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 1 Всего: 14 |
ReGeDiT, ну сделай что ли так:
Это сообщение отредактировал(а) ptr - 23.8.2006, 15:20 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
интересно...
а можно как-нибудь ещё? чтобы сканировались все данные (как я в 1м посте описал)... все которые нужны.. |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
а какие еще нужны?
|
|||
|
||||
| ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 1 Всего: 14 |
Можно, но только завтра Ну ты бы сразу писал, что тебе полностью строку распарсить надо. Конкретнее, какие нужны? Еще было бы неплохо видеть какими могут быть строки (побольше примеров). -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
sscanf(buf,"%s:M:WS9:[%s:%d] msg [%s] %s %s",&time,&ip,&port,&msg,&type,&lang); printf("%s\n",msg); };
|
|||
|
||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
вот почти всё что может..) т.е. в msg может быть и 1 и 2 и 100 и больше слов ) Это сообщение отредактировал(а) ReGeDiT - 23.8.2006, 17:51 |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
насколько я помню по формату %s считывается строка т.е. все символы начиная с текущего до первого встретившегося символа пробельной группы (вероятно есть возможность установить другой разделитель), в таком случае:
17:04:03:M:WS9:[0.0.0.0:1111] msg [text1] type=0 lang=1 попытавшись разобрать строку форматом
вообщето я не уверен что следует писать &time, ведь мы должны передать указатель на объект в который хотим прочитать, в случае char time[ANY_CONST], time и будет указателем на объект, т.е. писать следует sscanf(buf,"%s:M:WS9:[%s:%d] msg [%s] %s %s",time,ip,&port,msg,type,lang); но возможно и ваша запись работоспособна, не буду спорить. Итак в результате в time попадет "17:04:03:M:WS9:[0.0.0.0:1111]" потом в ip пойдет "msg" , ну а с port появятся проблемы, так как настанет очередь читать "[". полностью разобрать приведенную выше строку можно например таким форматом: "%d:%d:%d:M:WS9:[%d:%d:%d:%d:%d] msg [%c%c%c%c%c] %s %s", а какой формат вам нужен, вам и виднее наверное ps имхо изложенное выше можно было понять из приведенных примеров |
|||
|
||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
по изложенному выше я понял только принцип работы и то, почему у меня неработал мой ввод.
но проблема осталась )) нужно распарсировать всю строку... конструкция вида :
|
|||
|
||||
| Oleg_Ci |
|
|||
![]() Friend ![]() ![]() Профиль Группа: Участник Сообщений: 485 Регистрация: 28.5.2006 Где: Новосиб.обл. Репутация: 3 Всего: 30 |
Помойму что-то вроде этого надо.
Это сообщение отредактировал(а) Олег4 - 23.8.2006, 19:01 |
|||
|
||||
| Oleg_Ci |
|
|||
![]() Friend ![]() ![]() Профиль Группа: Участник Сообщений: 485 Регистрация: 28.5.2006 Где: Новосиб.обл. Репутация: 3 Всего: 30 |
Или вроде этого, только пример с ошибкой какой-то, я её не понял.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |