Re[2]: работа с текстом
От: vnp  
Дата: 19.08.05 00:12
Оценка: 8 (1)
Здравствуйте, Анатолий Широков, Вы писали:

АШ>
...
АШ>void main(int argc, char* argv[])
АШ>{
АШ>    enum {search, show_tag} state = search;
...
АШ>    while( gets(line) )
АШ>    {
АШ>        switch(state)
...
АШ>                    goto done;
...
АШ>done:
АШ>    exit(0);
АШ>}
АШ>


Сложновато как-то, не находите? И никогда-никогда не вызывайте gets...


int main(int argc, char ** argv)
{
    char * opentag = malloc(1 + strlen(argv[1]) + 1);
    char * closetag = malloc(2 + strlen(argv[1]) + 1);
    char line[LONG_ENOUGH + 1];

    sprintf(opentag, "#%s\n", argv[1]);
    sprintf(closetag, "#/%s\n", argv[1]);

    /* Пропустить все до открывающего тэга */
    while(fgets(line, LONG_ENOUGH, stdin) && strcmp(line, opentag))
        ;

    /* Печатать все до закрывающего тэга */
    while(fgets(line, LONG_ENOUGH, stdin) && strcmp(line, closetag))
        puts(line);

    return 0;
}



Один баг здесь еще присутствует: если среди blabla в нужном месте окажется нужный текст, файл будет обработан неправильно.

Так что по-хорошему, sed -n -e '0,/testX/d;/^#\/testX/q;0,$p/'
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.