Показать сообщение отдельно

  #6  
Старый 25.01.2008, 01:07
Delimiter
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме:
2187381

Репутация: 518
По умолчанию

ну давайте по тихоньку помогем,
.... хоть я и не понял как там делить на XML "единицы"
бери мою функцию....

Код:
skipped by members of Delimiter's group....
mytrim функция просто уберает пробелы спереди с задницы строки

havegotfield функция выдирает из строки поле под номером nelement ,разделителем в которой выступают все символы в delimiterStr (в нашем случае похоже ";" для первого выдирания и ":" для 2-го)

номера элементов считаются с 1(единицы)
mode -либо 0 либо 1, при нуле два следующих друг за другом делимитера(символа разделителя) рассматривает как один, при 1 выдает пустое поле в случае двух рядом стоящих делимитера.

ну и цикл

где то

FILE *f;
char buf[1000];
int ind,flag_field;
char smb;

Код:
  ind=0; flag_field=0;
 while(.....) 
 {
    switch(smb=fgetc(f))
    {
       case 0x0d:
                *(buf+ind)=0;
                break;
       case 0x0a:
               mytrim(buf);
               if(flag_field==1)
               {
                   if(*buf!='{')   
                      analiz(buf); // функция которую требуется написать  :)
                   else
                     flag_field=0;
               } 
               else
                  if(strcmp(buf,"{events}")==0)
                    flag_field=1;
               ind=0;
               break;
      default:
              *(buf+ind)=smb;
             ind++;
    }
 }
ПО ПОВОДУ ФУНКЦИИ АНАЛИЗА!!!

EVENT[1]=START_T:07+29+30;END_T:07+45+59;START_D:06+11+200 4;END_D:06+11+2004;
LAST_DAY:false;LOCATION:Home;NAME:Test;NOTE:Test;C ATEGORIES:%c1+%c2

допустим 1-я строчка в буфере buf
значит

havegotfield(buf,buf1,1,";",1);
// в buf1 EVENT[1]=START_T:07+29+30
havegotfield(buf1,buf2,1,":",1);
// в buf2 EVENT[1]=START_T
havegotfield(buf1,buf3,2,":",1);
// в buf3 07+29+30
havegotfield(buf2,buf4,1,"=",1);
// в buf4 EVENT[1]


ну а тот кто не любит "размазывать кашу"могет сразу
havegotfield(buf1,buf3,N,":;=",1); // cо всеми делимитерами.
функция в случае успеха возвращает 1 в ином 0
кароче .... если бы я понял ,чего тебе нужно я бы и сам написал а так рассказал о моей очччень нужной
функции

Последний раз редактировалось Delimiter; 25.01.2008 в 05:05..
 
Ответить с цитированием