![]() |
|
Модераторы: 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 |
Или вроде этого, только пример с ошибкой какой-то, я её не понял.
|
|||
|
||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
второй вариант очень хорош и подходит мне.
правда поле msg всегда пустое... и какойто ":0]" =)
|
|||
|
||||
| ergocom |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 16.8.2006 Репутация: нет Всего: нет |
Народ вы правы мне нужны простые числа вот как мона очень легко их найти!
|
|||
|
||||
| ptr |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 1 Всего: 14 |
ergocom, не туда попал. Это сообщение отредактировал(а) ptr - 24.8.2006, 19:05 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
||||
|
|||||
| ergocom |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 16.8.2006 Репутация: нет Всего: нет |
Точно темой ошибся
надо и там написать |
|||
|
||||
| Oleg_Ci |
|
||||
![]() Friend ![]() ![]() Профиль Группа: Участник Сообщений: 485 Регистрация: 28.5.2006 Где: Новосиб.обл. Репутация: 3 Всего: 30 |
|
||||
|
|||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
а обязательно на Си? Если можно С++ то можно сделать так
-------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
| ReGeDiT |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
ptr спасибо.
но существуют две вещи которые вызывают критикал еррор: 1. после длинной строки
2. когда в начале время выражено так:
т.е. когда нету первых двух символом а есть только 1 пытался сделать что-то вроде этого, но не получилось.. =(
А так огромное спасибо! |
||||||
|
|||||||
| ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 1 Всего: 14 |
Вот упрощённая версия:
Сейчас посмотрю. Что за критикал еррор? Это сообщение отредактировал(а) ptr - 25.8.2006, 16:50 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
критическая ошибка... программа вылетает просто
кстати давно ещё хочу спросить, почему при Debug у меня появляются ошибки, критические, а при Release нету :/. Это странно... =( Это сообщение отредактировал(а) ReGeDiT - 25.8.2006, 14:30 |
|||
|
||||
| ptr |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 1 Всего: 14 |
Теперь со временем и длиной строки всё в порядке, относительном 1. Можно обрезать msg до n символов. Скорее всего есть какое-то ограничение на длину msg. 2. Можно читать строку полностью ничего не обрезая. 3. Можно оставить так как есть.
Да ничего странного нет. Хуже если наоборот. Debug он на то и Debug чтобы ошибки ловить Вспомнилось тут. Не помню точно уже в какой программе, но если не указать имя файла, то программа сообщала об ошибке: "Catastrophic error: file not found". Так что радуйся, что у тебя всего лишь критическая ошибка Это сообщение отредактировал(а) ptr - 25.8.2006, 17:05 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
||||
|
|||||
| ReGeDiT |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.7.2006 Где: Пущино на Оке Репутация: нет Всего: нет |
ptr =)
ты спасаешь меня уже 3й раз =) как тебя отблагодарить =) Это сообщение отредактировал(а) ReGeDiT - 27.8.2006, 14:54 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |