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

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);
 
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:
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
 
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
 
Back
Topo