1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[PROGRAMAÇÃO] Contador de linhas em vários ficheiros

Discussão em 'Programação' iniciada por mr_quintas, 21 de Abril de 2012. (Respostas: 11; Visualizações: 1474)

  1. mr_quintas

    mr_quintas Power Member

    boas...

    estava a criar um programa que me conte o numero de linhas em vários ficheiros sem ser necessário por a extensão
    ex.:
    ./contar_linhas aa bb cc
    resulatdo:
    Ficheiro aa 3 linhas
    Ficheiro bb 2 linhas
    Ficheiro cc Erro nao existe

    ainda só fiz pra ler um ficheiro e com extensão se alguém me poder ajudar agradecia
    Código:
    #include <unistd.h>#include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define exit_on_null(s,m) if (s == NULL) { perror(m); exit(1); }
    
    
    int main (int argc, char *argv[])
     {
    
    
            FILE * fp; char * line=NULL; ssize_t n=0;
            /* Usage */
            int nl=0, nc=0, npp=0, i=0;
    
    
            if (argc!=2)
            {
                    printf("Usage: %s <file name>\n",argv[0]);
                    exit(1);
            }
    
    
            fp=fopen(argv[1],"r");  /*Abre ficheiro para leitura*/
            exit_on_null (fp,"Erro na abertura");  /*Leitura linha a linha*/
    
    
            while ((n = getline(&line, &n, fp)) != -1)
            {
                    nl++;
                    line[strlen(line)-1]='\0';  /*Retira \n do final da linha*/
                    nc+=strlen(line);
            for (i=0; i<strlen(line)-1; i++)
            {
                    if (line[i]==' ')
                            npp++;
            }
    
    
            printf("%s\n",line);
            printf(" Linhas:%d \n  Palavras:%d \n  Caracteres:%d \n",nl,npp,nc);
     
  2. Sidner

    Sidner Power Member

    Bem, o argc dá-te quantos ficheiros tens, ou seja, o teu ciclo vai ter um contador que vai de zero até esse valor-1, pois o comando em si também é contabilizado (ou seja, ./comando aa bb dá-te um argc de tres). O que podes fazer é criar um char* em que, em cada iteração, atribuis o argv respectivo a esse char*. Depois usas o strcat para lhe adicionares a extensão (presumo que de texto...). Depois, é fazeres o que quiseres com o ficheiro.
     
    Última edição: 21 de Abril de 2012
  3. nfk

    nfk Power Member

  4. mr_quintas

    mr_quintas Power Member

    e soluções concretas
     
  5. Ketheriel

    Ketheriel Power Member

    Eu sei que isto é capaz de ser um pouco overkill e matar a simplicidade, mas se programas C em Linux, que tal utilizar a libc e o getopt ou o argp (argp_parse) ? Eu sei que muitas vezes certos professores em cadeiras de Algoritmia e afins gostam de complicar e querem que o pessoal faça tudo à unha... mas na realidade ninguem faz esse tipo de trabalho, e embora seja gratificante, à sempre uma biblioteca que tem o que nos precisamos :)

    http://www.gnu.org/software/libc/manual/html_node/Using-Getopt.html#Using-Getopt
     
  6. mr_quintas

    mr_quintas Power Member

    alguem me sabe dizer como faço um printf no monitor da funçao execlp, tipo numero de linhas :3
     
  7. shadowownz

    shadowownz Power Member

    mr_quintas, alguma novidade quando a essa função?
     
  8. mr_quintas

    mr_quintas Power Member

  9. shadowownz

    shadowownz Power Member

    nao uses o da ficha que o quental deu, usa antes o npfile.c que esta nos zips do moodle...Agora tambem nao sei como ******* vou implementar a exec
     
  10. mr_quintas

    mr_quintas Power Member

    mas quem é o quental?
     
  11. shadowownz

    shadowownz Power Member

    Deixa me adivinhar, és de Eng.Informática do IPV certo?
     

Partilhar esta Página