2016-06-20 3 views
0

Ich versuche einen Code mit C zu schreiben, wo ich eine Datei mit mehr als 300.000 Zeilen habe. Ich möchte also ein bestimmtes Wort (# P5P5) sehen, das mehr als einmal erscheint und auch die entsprechenden Zeilen dieses Wortes lesen. Aber mein Programm sucht nur das erste Wort und hört auf ... Ich möchte eine Schleife machen, um die anderen zu finden.#Programm in C - Wie liest man ein Wort und die Zeile dieses Wortes in einer .txt? C-Programm

Danke, Gabriela

So ist mein Code dies:

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

int main(int argc, char *argv[]) 
{ 
FILE *arquivo = fopen("testando.txt", "r"); 
char caractere; // caractere a ser lido 
int existe_linhas = 0; 
int quant_linhas = 0; 
int num = 0; 

char pesquisa[] = "# 00"; // string a ser pesquisada 
int pos = 0; // posicao de início da pesquisa 
int encontrei = 0; // status da pesquisa 


if(arquivo != NULL) //verifica se o arq foi aberto ok 
{ 


while((caractere = fgetc(arquivo)) != EOF) 
    { 
    // vamos verificar se o caractere atual se iguala ao 
    // primeiro caractere da string a ser pesquisada 

    existe_linhas = 1; // há conteúdo no arquivo 

    if((caractere == pesquisa[0]) && (!encontrei)) 
    { 
    encontrei = 1; // podemos continuar a pesquisa a partir daqui 
    pos = 0; 
    } 

    if(encontrei) 
    { 
    if(caractere == pesquisa[pos]) 
     { 
     encontrei = 1; // continua a pesquisa 
     pos++; // incrementa a posição de busca 

     if(pos == strlen(pesquisa)) 
     break;    
     } 
    else{ 
     encontrei = 0;  
    }    
    } 

    if(caractere == '\n') //verificar se é quebra de linha 
    { 
    quant_linhas++; 
    } 





    } //fecha o while 

    if(existe_linhas) 
    quant_linhas++; 

    if(encontrei){ 
     printf("A string pesquisada existe no arquivo"); 
    } 
    else{ 
     printf("A string pesquisada NAO existe no arquivo"); 
    } 

    printf("\n\n"); 

printf("A string pesquisada está na linha %d.", quant_linhas); 
fclose(arquivo); // libera o ponteiro para o arquivo 
} 


else 
printf("Nao foi possivel abrir o arquivo."); 


printf("\n\n"); 
system("PAUSE");  
return 0; 
} 

Antwort

1

Wenn Sie das Wort, das Sie verwenden Pause finden, die die while-Schleife stoppt und hält Zeichen aus der Datei zu lesen.

if(pos == strlen(pesquisa)) 
    break;  // this is where you stop the loop instead of doing what you want to do when you find the word.  
    } 

ich nicht wirklich verstehen, was Sie tun möchten, wenn Sie das Wort finden, können Sie versuchen Sie es zu klären, was Sie in Ihrem Code zu tun, zielen darauf ab?

Als Randnotiz, Sie Encontrei nicht zurückgesetzt, wenn Sie einen Zeilenumbruch starten.

+0

Hallo, Nachdem ich Wort gefunden habe möchte ich das nächste gleiche Wort finden. Weil ich in meinem .txt dieses Wort viele Male habe. Ich möchte die Nummer der Zeile wissen, wo ich dieses Wort finde. Zum Beispiel: Zeile 3, Zeile 200, Zeile 1000 usw. Weil diese .txt eine Daten-.txt ist, wo ich mehr als 300.000 Zeilen mit Datenblöcken habe. – Gabriela

1

Wie TomerSH sagte

Im

if(pos == strlen(pesquisa)) break; 

Sie die while-Schleife stoppen sind, statt dass Sie eine Variable erhöhen könnte zu zählen, wie oft das Wort erscheint und setzen Sie Ihren pos und encontrei Variablen, um die nächsten Zeichen in der Datei zu suchen.

+0

Danke, ich werde das tun, weil ich gesehen habe, dass ich die Variablen zurücksetzen muss ... aber ich wusste nicht wo .... – Gabriela

Verwandte Themen