• 0
Sign in to follow this  
Namidia1

Algorítimo para contar repetições de números dentro de vários arquivos .txt

Question

Tenho vários arquivos .txt que contém apenas números. O nome dos arquivos são folha0001.txt, folha0002.txt, folha0003.txt, ..., folha1000.txt. 

Quero um que conte as repetições de todos os números no intervalo de 0 a 255. 

por exemplo, se tenho 1000 arquivos e em cada arquivo aparece 5 vezes o número 13 e 4 vezes o número 327, no final da contagem deverá mostrar que há 5000 repetições do número 13 e 4000 repetições do numero 327. 

Tenho um Exemplo de um contador em que só tem interesse de contar o número 255 dentro de arquivos que contem apenas os números 0 e 255.

 

 

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>


unsigned folha ( int valor){
    
}

int main(int argc, char* argv[]) {
    // varivavel com o nome do arquvio sera completada com o numero do arquivo
    char     buffer[100] = "folha",
         ch;
    char aux[500];
    int j = 0;
    int x = 0;
    int i=1;
    int valor = 255;
    unsigned num=0;
    unsigned contarq = 0;    
    FILE     *arq;

    //itoa(i,buffer,10);//aqui para converter apenas o inteiro em string
    
    //completando a string com o indice do arquivo 
    sprintf(buffer,"%s000%d.txt",buffer,i); // para formatar as strings ou concatenar valores, onde %s(string) %(d) inteiro na base 10
    
    printf("%s\n", buffer);
    
    arq = fopen(buffer, "r");
    
    // vai abrindo os arquivos um por um ate não encontrar mais nenhum
    while (arq != NULL){
        
    
        // percorrendo e procurando o valor no aquivo folhaINDICE.txt
        while( (ch=fgetc(arq))!= EOF )
            //quando encontrar um numero, vai atribui ao vetor aux, um por um, ate encontrar o numero completo ex: 2 , 25 , 255 
            if (ch == '1' || ch == '2' ||ch == '3' || ch == '4' ||ch == '5' || ch == '6' ||ch == '7' || ch == '8' || ch == '9' || ch == '0'){
                aux[j++] = ch;
            }
            else{
                //finaliza a string aux com o \0 e transforma ela em inteiro 
                aux[j] = '\0';
                x = atoi(aux);
                j = 0;
                
                // verifica se o numero inteiro que foi encontrado é o que deseja
                // como so tem valores 255 e 0 , pode substituir a variavel por 255
                if (x == valor){
                    contarq++;
                    num++;
                }
            }
            
        printf ("quantidade de repeticao no arq %d : %d\n", i, contarq);
        //fecha arquivo
        fclose(arq);
        
        //abrindo o proximo arquivo
        i++;
        contarq = 0;
        strcpy( buffer, "folha");
        
        //abrindo o proximo arquivo
        if (i < 10) {    
            sprintf(buffer,"%s000%d.txt",buffer,i); 
            printf("%s\n", buffer);
            arq = fopen(buffer, "r");
        }
        else 
            if ( i == 10 || i < 100){
        
                sprintf(buffer,"%s00%d.txt",buffer,i); 
                printf("%s\n", buffer);    
                arq = fopen(buffer, "r");
            }
            else
                if ( i == 100 || i < 1000){
                    
                    sprintf(buffer,"%s0%d.txt",buffer,i);
                    printf("%s\n", buffer);
                    arq = fopen(buffer, "r");
                }
            
    }
    
    printf("quantidade total de repeticoes: %d \n", num);
    
    system("pause");
    
    return 0;
}

Share this post


Link to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this