Ir ao conteúdo
  • Cadastre-se

Busca de palavras em mais de um arquivo c++


Pereira Ribeiro

Posts recomendados

Pessoal, 

Boa tarde

Estou com uma duvida.....

Fiz um código onde ele busca uma palavra em um arquivo e joga na tela a palavra e a linha onde ela está.

Eu passo o nome do arquivo como primeiro argumento e a palavra a ser buscada como segundo argumento.

 

Sendo que agora preciso que ele procure a mesma palavra em 3 arquivos txt diferentes, inserindo somente a palavra a ser buscada como argumento

Os 3 arquivos estão todos dentro de uma base.bin

 

Sabem como consigo fazer isso:?

 

Obrigado

 

Segue o codigo que já fiz 

#include <fstream>
#include <string>
#include <iostream>
#include <time.h>
using namespace std;

int main(int argc, char *argv[]){
  string palavra, linha;
  argc = 2;
  palavra = argv[2];
  int n;
  ifstream arqtxt;
  arqtxt.open(argv[1]);
    
  clock_t tStart = clock();
  if(arqtxt.is_open()) {
    while (!arqtxt.eof()) {
      getline(arqtxt,linha);
      if ((n = linha.find(palavra, 0)) != string::npos){
        cout<<"Palavra "<<palavra<<" encontrada em: "<< ((double)(clock()    - tStart)/60)<<" segundos"<<endl;
        arqtxt.close();
        return 0;            
      }
            
    } 
    cout<<"Palavra "<<palavra<<" não encontrada em "<< ((double)(clock()-tStart)/60)<<" segundos"<<endl;    
    arqtxt.close();
  } else {
    cout<<"Arquivo "<<argv[1]<< " não encontrado em "<<((double)(clock()-tStart)/60)<<" segundos"<<endl;
  }            
        
  return 0;
}

 

busca.jpg

Link para o comentário
Compartilhar em outros sites

a ver si entendo....
você quer buscar uma palavra em 3 arquivos? Más os 3 arquivos vão estar na mesma pasta do programa? E você não pode passar os nomes dos arquivos, só a palavra? Se for assim você deve explorar o diretório para averiguar que arquivos terminam em .bin e buscar a palavra em todos os arquivos desse mesmo tipo:

Aqui deixo um código que tenho guardado para explorar pastas e ver informação dos arquivos existentes dentro de uma pasta:

#include <stdlib.h>
#include <stdio.h>
//#include <sys/types.h>
#include <dirent.h>

void error ( const char *s );
void procesoArchivo ( char *archivo );

int main() {
    DIR *dir;
    struct dirent *ent;
    dir = opendir ( "." );
    
    if ( dir == NULL ) error ( "Nao foi possivel abrir a pasta!" );
        

    while ( ( ent = readdir ( dir ) ) != NULL ) {
        /* Retorna a pasta atual(.) ou a pasta um nivel acima(..) igualmente como o comando ls*/
        if ( ( strcmp ( ent->d_name, "." ) != 0 ) && ( strcmp ( ent->d_name, ".." ) != 0 ) ) {
            procesoArchivo ( ent->d_name );
        }
    }
    
    closedir ( dir );
    
    return EXIT_SUCCESS;
}

void error ( const char *s ) {
    /* perror retorna a string s e o erro relacionado com errno*/
    perror ( s );
    exit ( EXIT_FAILURE );
}

void procesoArchivo ( char *archivo ) {
    /* Para processar, ou pelo menos fazer algo com o arquivo, vamos informar o tamanho em bytes de cada arquivo */
    /* Usaremos para ver o tamanho em bytes o que podemos ver aqui (Español): http://totaki.com/poesiabinaria/2010/04/tamano-de-un-fichero-en-c/*/
    FILE *fich;
    long ftam;
    
    fich = fopen ( archivo, "r" );
    
    if ( fich ) {
        fseek ( fich, 0L, SEEK_END );
        ftam = ftell ( fich );
        fclose ( fich );
        /* Se tudo foi bem informamos o tamanho */
        printf ( "%36s (%ld bytes)\n", archivo, ftam );
    } else
        /* Se aconteceu algum erro só mostramos o nome */
        printf ( "%30s (No info.)\n", archivo );
}

você deveria modificalo para ir abrindo um a um todos os arquivos terminados em bin e fazer a tal busca.






 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...