Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с нахождением строки в другой строке... Облазил весь поиск 
V
    Опции темы
ReGeDiT
Дата 23.8.2006, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 4.7.2006
Где: Пущино на Оке

Репутация: нет
Всего: нет



второй вариант очень хорош и подходит мне.

правда поле msg всегда пустое... и какойто ":0]" =)

Код

17:29:15:M:WS9:[10.0.0.189:4127]:0] msg []


smile
PM MAIL WWW ICQ   Вверх
ergocom
Дата 24.8.2006, 05:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 16.8.2006

Репутация: нет
Всего: нет



Народ вы правы мне нужны простые числа вот как мона очень легко их найти! smile 
Код

#include <iostream> 
using namespace std; 

int main() {  
_wsetlocale(LC_ALL, L"Russian");
  int i, j; 
  bool prime; 

  for(i=1; i < 100; i++) { 
    prime = true;  

    
    for(j=2; j <= i/2; j++) 
     
      if((i%j) == 0) prime = false; 

    if(prime) 
      cout << i << "  Простые числа с 1-100\n"; 
  } 

  return 0; 
}

PM   Вверх
ptr
Дата 24.8.2006, 06:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

Репутация: 1
Всего: 14



Код

    char time[9]="\0";
    char port[100]="\0";
    char message[100]="\0";
    char ip[16]="\0";
    char *pos=NULL;
    int type=0,lang=0;

    sscanf(buf,"%8[0-9:]",time);

    if((pos=strstr(buf,":["))!=NULL)
    {
        sscanf(pos,":[%15[0-9.]:%[0-9]",ip,port);
    }

    if((pos=strstr(buf,"msg ["))!=NULL)
    {
        sscanf(pos,"msg [%[^]]",message);//sscanf(pos,"msg [%100[^]]",message);
    }

    if((pos=strstr(buf,"type="))!=NULL)
    {
        sscanf(pos,"type=%d",&type);
    }

    if((pos=strstr(buf,"lang="))!=NULL)
    {
        sscanf(pos,"lang=%d",&lang);
    }


Цитата(ergocom @  24.8.2006,  09:49 Найти цитируемый пост)
Народ вы правы мне нужны простые числа вот как мона очень легко их найти! smile 


ergocom, не туда попал. smile 

Это сообщение отредактировал(а) ptr - 24.8.2006, 19:05


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
ergocom
Дата 24.8.2006, 07:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 16.8.2006

Репутация: нет
Всего: нет



Точно темой ошибся  smile 
надо и там написать
PM   Вверх
Oleg_Ci
Дата 24.8.2006, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 3
Всего: 30



Цитата
17:10:26:M:WS9:[0.0.0.0:1111] msg [lala] type=0 lang=1
17:11:04:M:WS9:[0.0.0.0:1111] msg [gfgggfdgd dsd] type=0 lang=1
Из-за того что строчки в скобках '[...]' разные по длинне, и наличие пробела во втором случае,  поэтому и неработает 'sscanf'. Так надо значит переменную msg читать отдельно. У меня работает без ошибок, Microsoft Visual 2003.
Код

void main()    
{    
    FILE *file;
    file = fopen( "text.txt", "r" );
    if ( !file ) return;

    const int len = 200;
    char ch[len];
    char  time[9], ip[8], msg[20], type[7], lang[7];
    time[0] = '\0';
    ip[0] = '\0';
    msg[0] = '\0';
    type[0] = '\0';
    lang[0] = '\0';
    int port, i;

    while ( fgets( ch, len, file ) != NULL )
    {
        if (strstr( ch,"msg")) 
        {
    //  здесь считываем строку без переменной 'msg'
        sscanf( ch,"%8s:M:WS9:[%7s:%4d] msg [%*4s] %6s %6s", time, ip, &port, type, lang);

    // здесь читаем переменную 'msg'
        for ( i = 0; ch[i+35] != ']' && i<20; i++ )
            msg[i] = ch[i+35];
        msg[i] = '\0';

    //  выводим результат
        printf( "%s:M:WS9:[%s:%d] msg [%s] %s %s\n", time, ip, port, msg, type, lang );
        }
    }

    getchar();
    fclose( file );
}

PM MAIL   Вверх
Rockie
Дата 24.8.2006, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата(ReGeDiT @  23.8.2006,  13:08 Найти цитируемый пост)
в них надо выцепить "msg [xxxx]"

а обязательно на Си? Если можно С++ то можно сделать так

Код
#include<iostream>
#include<fstream>

using namespace std;

int main(){
  string str, msg;
  int msg_here, bracket;

  ifstream read_file("1.txt");   // open input file
     if (!read_file) return 0;

  while( getline(read_file,str) )
  {  msg_here = str.find("msg",0);                      // find where "msg" begins

    if(msg_here!=-1)                                    // if there is "msg",
      {  bracket = ( str.find ( "]",msg_here ) );       // find "]" after "msg"
         msg= str.substr(msg_here, bracket+1-msg_here); // cut substring
         cout<<msg<<'\n';
      }
   }

 cin.get();    // press enter
 return 0;
}



--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
ReGeDiT
Дата 25.8.2006, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 4.7.2006
Где: Пущино на Оке

Репутация: нет
Всего: нет



ptr спасибо.

но существуют две вещи которые вызывают критикал еррор:

1. после длинной строки 

Код

10:23:27:M:WS17:[10.0.2.235:1057] CMSG_SET_ACTIVE_MOVER DD000000DD664BAB
10:23:27:M:WS17:[10.0.2.235:1057] msg [.friends mokugin ronfabind who bigboss boss bous cilvana cpjack do eilidd erika firich legalaz luny newweldor oin painkiler disrd ragodast rasamaxa roll ron tesey veda wolf] type=3 lang=7


2. когда в начале время выражено так:

Код

0:00:00
1:00:00
............
9:00:00

т.е. когда нету первых двух символом а есть только 1 smile

пытался сделать что-то вроде этого, но не получилось.. =(

Код

if ((sscanf(buf,"%8[0-9:]",time))==NULL) { sscanf(buf,"%7[0-8:]",time); } else { sscanf(buf,"%8[0-9:]",time); };


А так огромное спасибо! smile
PM MAIL WWW ICQ   Вверх
ptr
Дата 25.8.2006, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

Репутация: 1
Всего: 14



Вот упрощённая версия:
Код


char buf[]="17:17:15:M:WS9:[0.0.0.0:1111] msg [Away from Keyboard] type=20 lang=0";

    char time[9]="\0", message[100]="\0";
    char port[100]="\0", ip[16]="\0";
    int type=0, lang=0, retval=0;

    retval=sscanf(buf,"%8[0-9:]%*[^[][%15[0-9.]:%[0-9]] msg [%99[^]]] type=%d lang=%d",time,ip,port,message,&type,&lang);
    if(6==retval)
    {
        printf("%s %s %s %s %d %d\n",time,ip,port,message,type,lang);
    }



Цитата(ReGeDiT @  25.8.2006,  15:52 Найти цитируемый пост)
2. когда в начале время выражено так:


Цитата(ReGeDiT @  25.8.2006,  15:52 Найти цитируемый пост)
1. после длинной строки 

Сейчас посмотрю.

Цитата(ReGeDiT @  25.8.2006,  15:52 Найти цитируемый пост)
о существуют две вещи которые вызывают критикал еррор:

Что за критикал еррор?


Это сообщение отредактировал(а) ptr - 25.8.2006, 16:50


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
ReGeDiT
Дата 25.8.2006, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 4.7.2006
Где: Пущино на Оке

Репутация: нет
Всего: нет



критическая ошибка... программа вылетает просто smile


кстати давно ещё хочу спросить, почему при Debug у меня появляются ошибки, критические, а при Release нету :/. Это странно... =(

Это сообщение отредактировал(а) ReGeDiT - 25.8.2006, 14:30
PM MAIL WWW ICQ   Вверх
ptr
Дата 25.8.2006, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

Репутация: 1
Всего: 14



Код

char buf[]="10:23:45:M:WS17:[10.0.2.235:1057] msg [.friends mokugiweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeretreghdsfn ronfabind who bigboss boss bous cilvana cpjack do eilidd erika firich legalaz luny] type=3 lang=7";
    char time[9]="\0", message[100]="\0";
    char port[100]="\0", ip[16]="\0";
    int type=0, lang=0, retval=0;
    retval=sscanf(buf,"%8[0-9:]%*[^[][%15[0-9.]:%[0-9]] msg [%99[^]]] type=%d lang=%d",time,ip,port,message,&type,&lang);

    if(6==retval)
    {
     if(time[strlen(time)-1]==':')
     {
        time[strlen(time)-1]='\0';
     }
        printf("%s %s %s %s %d %d\n",time,ip,port,message,type,lang);
    }

Теперь со временем и длиной строки всё в порядке, относительном smile . Если msg длиннее чем n символов (100 символов), строка полностью игнорируется. Здесь есть три варианта:
1. Можно обрезать msg до n символов. Скорее всего есть какое-то ограничение на длину msg.
2. Можно читать строку полностью ничего не обрезая.
3. Можно оставить так как есть.

Цитата(ReGeDiT @  25.8.2006,  18:29 Найти цитируемый пост)
кстати давно ещё хочу спросить, почему при Debug у меня появляются ошибки, критические, а при Release нету :/. Это странно... =(

Да ничего странного нет. Хуже если наоборот. Debug он на то и Debug чтобы ошибки ловить smile .

Цитата(ReGeDiT @  25.8.2006,  18:29 Найти цитируемый пост)
критическая ошибка... программа вылетает просто smile

Вспомнилось тут. Не помню точно уже в какой программе, но если не указать имя файла, то программа сообщала об ошибке: "Catastrophic error: file not found". Так что радуйся, что у тебя всего лишь критическая ошибка smile  smile  smile .

Это сообщение отредактировал(а) ptr - 25.8.2006, 17:05


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
ReGeDiT
Дата 27.8.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 4.7.2006
Где: Пущино на Оке

Репутация: нет
Всего: нет



ptr =)

ты спасаешь меня уже 3й раз =) как тебя отблагодарить =)

Это сообщение отредактировал(а) ReGeDiT - 27.8.2006, 14:54
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0617 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.