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

Поиск:

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


Шустрый
*


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

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



в файле имеется много строк вида

Код

17:04:03:M:WS9:[0.0.0.0:1111] msg [text1] type=0 lang=1
17:05:05:M:WS9:[1.1.1.1:2222] msg [text2] type=0 lang=2
18:34:02:M:WS9:[2.2.2.2:3333] msg [text3] type=0 lang=3
19:23:07:M:WS9:[3.3.3.3:4444] msg [text4] type=0 lang=4


в них надо выцепить "msg [xxxx]"

я делаю так:

Код

do {
    buf = getline(fp);
    if (strstr(buf,"msg")) { sscanf(buf,"%s:M:WS9:[%s:%d] msg [%s] %s %s",&time,&ip,&port,&msg,&type,&lang); printf("%s\n",msg); };
    lg = fopen("msg.log","wt"); fprintf(lg,"%s",msg); fclose(lg);
    free(buf);
    if (feof(fp)) { printf("\n\nEOF\n"); };
   }


но не работает. в чём проблема?

З.Ы. Тип остальных неважен, будь то string или int. Важен только тип msg...
PM MAIL WWW ICQ   Вверх
zkv
Дата 23.8.2006, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



если надо выцепить text1, text2 и т.д. я бы сделал (если соблюдать ваш стиль smile ) так:

Код

#include<stdio.h>
#include<string.h>
main()
{
    FILE *fp, *lg;
    char time[20];
    char msg[20];
    fp = fopen("in.txt", "r");
    lg = fopen("msg.log","wt");
    do { fscanf(fp,"%s msg [%s %s %s",time, msg,time,time); msg[ strlen(msg) - 1 ] = '\0';printf("%s\n",msg); fprintf(lg,"%s",msg); }  while( !feof(fp) );
    fclose(lg);
    fclose(fp);
}


Это сообщение отредактировал(а) zkv - 23.8.2006, 13:38
PM MAIL   Вверх
ReGeDiT
Дата 23.8.2006, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



да, забыл добавить... там в файле ещё помимо этих строк куча мусора +)

Код

16:56:27:M:WS9:Incoming connection from [0.0.0.0:111]
16:56:27:M:WS9:DEBUG: total connections 1
16:56:27:M:WS9:[0.0.0.0:1111] CMSG_AUTH_SESSION


и т.п. =)

поэтому тут банальным fscanf нельзя =(

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



****


Профиль
Группа: Участник Клуба
Сообщений: 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

PM MAIL   Вверх
ReGeDiT
Дата 23.8.2006, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



а это C++... а у меня C smile
PM MAIL WWW ICQ   Вверх
ptr
Дата 23.8.2006, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ReGeDiT, ну сделай что ли так:
Код

char *pos=NULL;
if((pos=strstr(buf,"msg ["))!=NULL)
{
    sscanf(pos,"msg [%s",buf2);
    buf2[strlen(buf2)-1]='\0';//убираем ]
    printf("%s",buf2);
}


Это сообщение отредактировал(а) ptr - 23.8.2006, 15:20


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


Шустрый
*


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

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



интересно...

а можно как-нибудь ещё? чтобы сканировались все данные (как я в 1м посте описал)...
все которые нужны..
PM MAIL WWW ICQ   Вверх
zkv
Дата 23.8.2006, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



а какие еще нужны? smile
PM MAIL   Вверх
ptr
Дата 23.8.2006, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(ReGeDiT @  23.8.2006,  20:06 Найти цитируемый пост)
а можно как-нибудь ещё?

Можно, но только завтра smile .

Цитата(ReGeDiT @  23.8.2006,  20:06 Найти цитируемый пост)
чтобы сканировались все данные (как я в 1м посте описал)...

Ну ты бы сразу писал, что тебе полностью строку распарсить надо.

Цитата(ReGeDiT @  23.8.2006,  20:06 Найти цитируемый пост)
все которые нужны.. 

Конкретнее, какие нужны?
Еще было бы неплохо видеть какими могут быть строки (побольше примеров).


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


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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); };
PM MAIL WWW ICQ   Вверх
ReGeDiT
Дата 23.8.2006, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

17:10:26:M:WS9:[0.0.0.0:1111] msg [lala] type=0 lang=1
17:10:27:M:Config file scripts/extra/defines.scp loaded, 0 sections done.
17:10:27:M:AreaTable loaded, total=1068
17:10:27:M:Lock loaded, total=194
17:10:27:M:MapCache inited, 42 maps.
17:10:27:M:water.dat loaded, 19392 recs.
17:10:27:M:File scripts/extra/qdbtexts.scp, max 53767, total 4754 sections.
17:10:27:M:WS9:[0.0.0.0:1111] msg [ggfg fdf] type=0 lang=1
17:11:04:M:WS9:[0.0.0.0:1111] msg [gfgggfdgd dsd] type=0 lang=1
17:11:11:M:WS9:[0.0.0.0:1111] CMSG_GOSSIP_HELLO 10
17:11:11:M:gossip with entry=40001
17:11:11:M:DEBUG: SendGossip from entry 40001
17:11:26:M:WS9:[0.0.0.0:1111] CMSG_GOSSIP_HELLO F
17:11:26:M:gossip with entry=40001
17:11:26:M:DEBUG: SendGossip from entry 40001
17:11:54:M:WS9:[0.0.0.0:1111] msg [dfgdg d a a] type=0 lang=1
17:12:05:M:WS9:[0.0.0.0:1111] msg [gfgfg das] type=0 lang=1
17:12:11:M:WS9:[0.0.0.0:1111] msg [adadf ads] type=0 lang=1
17:12:15:M:WS9:[0.0.0.0:1111] msg [adfa f] type=0 lang=1
17:17:15:M:WS9:[0.0.0.0:1111] CMSG_STANDSTATECHANGE 1
17:17:15:M:WS9:[0.0.0.0:1111] msg [Away from Keyboard] type=20 lang=0
17:21:37:M:WS9:[0.0.0.0:1111] CMSG_STANDSTATECHANGE 0
17:21:37:M:WS9:[0.0.0.0:1111] msg [] type=20 lang=0
17:22:54:M:WS9:[0.0.0.0:1111] msg [afdfa ff] type=0 lang=1
17:29:15:M:WS9:[0.0.0.0:1111] msg [gdfgdfg fsf] type=0 lang=1
17:29:16:M:Waiting for other threads...
17:29:16:M:Saving accounts...
17:29:16:M:done.
17:29:16:M: *** done.


вот почти всё что может..)

т.е. в msg может быть и 1 и 2 и 100 и больше слов )

Это сообщение отредактировал(а) ReGeDiT - 23.8.2006, 17:51
PM MAIL WWW ICQ   Вверх
zkv
Дата 23.8.2006, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



насколько я помню по формату %s считывается строка т.е. все символы начиная с текущего до первого встретившегося символа пробельной группы (вероятно есть возможность установить другой разделитель), в таком случае:
17:04:03:M:WS9:[0.0.0.0:1111] msg [text1] type=0 lang=1
попытавшись разобрать строку форматом
Код

sscanf(buf,"%s:M:WS9:[%s:%d] msg [%s] %s %s",&time,&ip,&port,&msg,&type,&lang); 

 вообщето я не уверен что следует писать &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", а какой формат вам нужен, вам и виднее наверное smile

ps имхо изложенное выше можно было понять из приведенных примеров
PM MAIL   Вверх
ReGeDiT
Дата 23.8.2006, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



по изложенному выше я понял только принцип работы и то, почему у меня неработал мой ввод.

но проблема осталась ))

нужно распарсировать всю строку...

конструкция вида : 
Код
%d:%d:%d:M:WS9:[%d:%d:%d:%d:%d] msg [%c%c%c%c%c] %s %s
 слишком ужасна %) тем более как быть если в msg [ ] пробелы, если там 100 слов и т.п. =(
PM MAIL WWW ICQ   Вверх
Oleg_Ci
Дата 23.8.2006, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


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

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



Помойму что-то вроде этого надо.
Код

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

    const int len = 100;
    const int size = 10;
    char ch[len], *c;
    char  time[size], ip[size], msg[size], type, lang;
    int port;

    while ( fgets( ch, len, file ) != NULL )
    {
        if (strstr( ch,"msg")) 
        {
            strncpy( time, ch, 8 );
            time[8] = '\0';

            strncpy( ip, &ch[16], 7 );
            ip[7] = '\0';

            port = atoi( &ch[24] );
            strncpy( msg, &ch[35], size );

            for ( c = &msg[size]; *c != ']'; c-- );
            *c = '\0';

            c = strstr( ch, "=" );
            c++;
            type = *c;

            c = strstr( c, "=" );
            c++;
            lang = *c;

            printf( "%s:M:WS9:[%s:%d] msg [%s] %c %c\n", time, ip, port, msg, type, lang );
        }
    }

    getchar();
    fclose( file );
}
sscanf(buf,"%s:M:WS9:[%s:%d] msg [%s] %s %s",&time,&ip,&port,&msg,&type,&lang);  <<<  ReGeDiT это у тебя помойму не работает.

Это сообщение отредактировал(а) Олег4 - 23.8.2006, 19:01
PM MAIL   Вверх
Oleg_Ci
Дата 23.8.2006, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


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

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



Или вроде этого, только пример с ошибкой какой-то, я её не понял.
Код

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

    const int len = 200;
    char ch[len], *c;
    char  time[8], ip[7], msg[10], type[6], lang[6];
    time[0] = '\0';
    ip[0] = '\0';
    msg[0] = '\0';
    type[0] = '\0';
    lang[0] = '\0';
    int port;

    while ( fgets( ch, len, file ) != NULL )
    {
        if (strstr( ch,"msg")) 
        {
// sscanf с ошибкой помойму...
            sscanf(ch,"%8s:M:WS9:[%7s:%4d] msg [%s] %6s %6s",time,ip,&port,msg,type,lang);
            printf( "%s:M:WS9:[%s:%d] msg [%s] %s %s\n", time, ip, port, msg, type, lang );
        }
    }

    getchar();
    fclose( file );
}

PM MAIL   Вверх
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   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0721 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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