+ Responder ao Tópico



  1. #1

    Padrão Dúvida em C

    Olá Pessoal,


    Estou fazendo um programinha em C que precisa verificar determinadas linhas dentro de um arquivo texto. Ele deve ir em uma linha pré estabelecida e procurar por uma certa string. Se a string estiver lá ele deve passar para a próxima linha pré estabelecida (que não é a seguinte) e verificar a existência da string até não encontrar mais. Pensei em fazer isso dentro de um for, estou com problemas para ler o arquivo (não sei C de forma eficiente). Alguem pode me ajudar com essa função ?

    Valew e t+

  2. #2

    Padrão Dúvida em C

    Código :
    #define     FILENAME_MAXLEN     255
    #define     ERROR_MAXLEN        1000
    #define     LOGLINE_MAXLEN      4096
    #define     MAIL_MAXLEN         4096
     
    int main(void)
    {
        FILE *fdlog;
        char *ptraux;
        char *filters[] = { "filtro 1", "filtro 2" };
        char logfile[FILENAME_MAXLEN], logline[LOGLINE_MAXLEN];
        char temp[MAIL_MAXLEN][6+1];
        int  errn;
        int x = 0, y = 0;
     
        memset(logfile,  0, sizeof(logfile));
        GetLastLogFile(logfile);                                // pegando o nome do ultimo log
     
        for (errn=0; errn<2; errn++)                            // loop para executar todos filtros
        {
            // zerando as matrizes
            memset(logline,  0, sizeof(logline));
            memset(temp,     0, sizeof(temp));
     
            fprintf(stdout, "(VERIFICANDO) %s\n", filters[errn]);
            if ((fdlog = fopen(logfile, "r")) == 0)             // abrindo ultimo arquivo de log
            {
                fprintf(stdout, "(ERRO ACESSO) %s\n", logfile);
                return -1;
            }
            fprintf(stdout, "(LENDO) %s\n", logfile);
     
            while (!feof(fdlog))                                // enquanto nao chegar ao fim do arquivo
            {
                fgets(logline, LOGLINE_MAXLEN, fdlog);          // le uma linha por vez
                if (ptraux = strstr(logline, filters[errn]))    // aplica os filtros definidos
                {
                    if (ptraux = strstr(ptraux, "Estab."))      // filtra somente o codigo do estabelecimento
                    {
                        strncpy(temp[x++], ptraux+7, 6);        // acrescenta ao buffer
                    }
                }
            }
            fclose(fdlog);                                      // fechando arquivo de log
            fprintf(stdout, "(FECHANDO) %s\n", logfile);
        }
     
        return 0;
    }

    Editei um que eu tinha feito aqui, só deixei o que é util para você... a funçao GetLastLogFile salva o nome de um arquivo no parametro (logfile neste caso), nao coloquei a funcao aqui pois era grande demais.
    Voce pode dar um strncpy(logfile, "seu-arquivo.log", sizeof(logfile)-1) para utilizar..
    Tirei os includes das bibliotecas porque nao gosto de dar as coisas prontas..
    Qualquer coisa posta aí denovo. Abraços

  3. #3

    Padrão feof()

    tu pode percorrer o arquivo da seguinte maneira:
    usa a função feof();

    assim:

    FILE *fp;
    fp=fopen("arquivo","r");/* "r" para leitura */
    while(!feof(fp)) {
    /*isso faz com q ele percorra o arquivo ateh o final*/
    }

    dai tu vai pegando a cada volta do while os caracteres e verifica se o caractere eh "\n", se for, incrementa o contador de linhas. assim tu poderá chegar ae a linha desejada.
    qqer dúvida, posta aí de novo.

  4. #4

    Padrão Dúvida em C

    Pode utilizar a função ftell() para guardar uma posição dentro do arquivo, e fseek() para voltar para aquela posição, pro início ou para o fim..

  5. #5

    Padrão Re: feof()

    Citação Postado originalmente por stumm
    FILE *fp;
    fp=fopen("arquivo","r");/* "r" para leitura */
    while(!feof(fp)) {
    /*isso faz com q ele percorra o arquivo ateh o final*/
    }
    na verdade ele soh vai percorrer o arquivo se usar alguma funcao tipo fgetc fgets etc, pq o feof soh checa se eh fim de arquivo, ele nao meche com o ponteiro do arquivo

  6. #6

    Padrão Dúvida em C

    Valeu, ta ajudando muito, já deu pra pegar umas funções uteis aqui pra mim. O que eu to fazendo é mais simples, tipo é só um arquivo que eu vou abrir e vou procurar em linhas já determinadas, eu sei as linhas que devo procurar as strings e tal. Mas acho que já deu pra resolver meu problema.

    Muito Obrigado a todos...