Steck
написал 22 июня 2005 года в 22:09 (667 просмотров)
Ведет себя
как мужчина; открыл 125 тем в форуме, оставил 550 комментариев на сайте.
Последние комментарии
-
OlegL, 17 декабря 2023 года в 15:00 →
Перекличка
21
-
REDkiy, 8 июня 2023 года в 9:09 →
Как «замокать» файл для юниттеста в Python?
2
-
fhunter, 29 ноября 2022 года в 2:09 →
Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt?
6
-
Иванн, 9 апреля 2022 года в 8:31 →
Ассоциация РАСПО провела первое учредительное собрание
1
-
Kiri11.ADV1, 7 марта 2021 года в 12:01 →
Логи catalina.out в TomCat 9 в формате JSON
1
DevOps as a Service from Palark
24/7 SRE & DevOps service to cover all your Kubernetes needs.

а что выпарсить-то надо?
ааа. что-то знакомая конструкция.. уж не история ли это общения с пользователем в licq?
и зачем тут C? perl в руки и вперёд.
Вот именно liqc ;o) да перл то оно конечно в этом рулит но!
Это уже дело принципа ;o) После того как я убил три часа на это ;o)
4decavr
Выпарсить надо слова в теле тегов.
Все получается но.. странное дело если идут одинаковые теги подряд то он не все читает!
Вообщем вот код постотрите а то я уже все себе сломал ) Но от принципа не отступлюсь все равно на Си напишу даже если на перле это заняло вы 10 минут ;o)
Вот код ии.. я вообще не пойму почему он не все вытаскивает
FILE *in; char *word,*ret; int SendingMessage=0,ReceivedMessage=0; word = (char *)malloc(sizeof(BUF)); ret = (char *)malloc(sizeof(BUF)); in = fopen(argv[1],"r"); while(fgets(word,sizeof(char) * BUF,in)) if( (word[0] == '[') && (word[2] == 'S') ) { SendingMessage++; while(fgets(word, sizeof(char) * BUF, in)) { if(word[0] == ':'){ printf(word); continue; } else { printf("\n"); break; } } } fclose(in); free(word); free(ret); }ага, а про место в word на завершающий '\0\′ забыл, да? ;)
далее, конструкцию
// while(fgets(word, sizeof(char) * BUF, in)) { if(word[0] == ':'){ printf(word); continue; } else { printf("\n"); break; }можно и так написать:
// while(fgets(word, sizeof(char) * (BUF-1), in)&&(word[0] == ':')) printf(word); printf("\n");вероятно, где-то ещё надо feof() делать… ;)
ps: и кроме того, представим, что идут подряд несколько
. тогда, при зваершении внутреннего цикла у нас word как раз и содержит строку с тегом. однако, её-то мы даже и не смотрим дальше — тупо читаем следующуювот и вся твоя проблема.Это я уж понял а как же этого избежать?
goto юзать? У меня уже кончились идеи Голова как мяч
не проверял, но где-то типа этого
in res; res = fgets(word, sizeof(char) * (BUF - 1), in); while (res) { if ((word[0] == '[') && (word[1] == 'S')) { SendingMessage++; while((res = fgets(word, sizeof(char) * (BUF - 1), in)) && (word [0] == ':')) printf(word); printf("\n"); } else res = fgets(word, sizeof(char) * (BUF - 1), in); }ps: правда, в таком случае есть одна грабля: если у тебя строчка попадётся более, чем BUF-1, то… она того, конец её выкинется.
в коллекции примеров есть парсилка таких конструкций:
——————
[некий токен]
то что выпарсить
[еще токен]
и еще ценная инфа
————-
под себя переделать сможешь?
Все получилось ВСЕМ спасибо!!
4Genie
С меня пиво ;o)