2017-02-09 1 views
0

Ich weiß nicht, wie Sie dieses Problem lösen. Ich habe diese Funktion, die alle .txt-Dateien druckt, die ich habe, aber ich muss auch nach jedem Dateinamen einige spezifische Zeichenfolgen (jeder Datei) suchen und drucken, die ein Wort enthalten. Dies ist der Teil, der den Namen der Dateien ausgibt.Search_string in einer Schleife von verschiedenen Dateien in C

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

int main() { 

    DIR* p; 
    struct dirent* pp; 
    p = opendir("./"); 

    if (p != NULL) { 

     while ((pp = readdir(p)) != NULL) { 
      int length = strlen(pp->d_name); 
      if (strncmp(pp->d_name + length - 4, ".txt", 4) == 0) 
       puts(pp->d_name); 
     } 

     (void)closedir(p); 
    } 

    return 0; 
} 

Ich brauche einige bestimmte Wörter (drei verschiedene Wörter) und drucken Sie die Zeile in dem enthalten sind zu suchen, die drei verschiedene Linien sein würde.

Momentan gibt das Programm folgendermaßen aus:

0_email.txt 
1_email.txt 

innerhalb dieser Dateien, die wie E-Mails sind, ich brauche er Datum zu drucken, wenn sie senden wurden (Datum :), der (An :) und das Thema (Gegenstand:). Diese Information ist nicht immer in der gleichen Zeile. Ich habe versucht, diesen Code, der das Wort suchen, aber ich bin nicht in der Lage, das Programm in allen Dateien suchen (weil diese Dateien erhöhen können und unterschiedliche Namen haben, nein, ich kann es nicht namentlich tun) und mehrmals

FILE *fp; 

    char filename[]="0_email.txt",line[200],search_string[]="To:"; 

    fp=fopen(filename,"r"); 

    if(!fp){ 
      perror("could not find the file"); 
      exit(0); 
    } 
    while (fgets (line, 200, fp) != NULL){ 

      if(strstr(line,search_string)) 
      fputs (line, stdout); 
    } 

    fclose (fp); 

Dieser zweite Code ist eine, die ich in Internet gefunden zu suchen, ich habe gerade c Programmierung lernen, und ich bin nicht sehr vertraut mit ihm.

Danke für Ihre Hilfe!

+0

Konnten Sie spezifischer sein und uns ein Beispiel zeigen? –

+0

Also für '.txt' Dateien müssen Sie sie öffnen und einen Teil der Datei lesen und ausdrucken? Warum versuchst du das dann nicht einfach nur mit dem Dateinamen? –

+0

Ich habe einige weitere Informationen hochgeladen. –

Antwort

0

Sie müssen etwas über Funktionen lernen.

Sie etwa brauchen folgende:

Es ist nicht getesteten Code, und es gibt noch eine Menge improvments, die getan werden sollte. Es ist nicht genau, was Sie wollen, und ich bin nicht einmal sicher, ob es kompiliert, aber es sollte Ihnen eine Idee geben, was Sie tun müssen:

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

int CheckFile(const char *filename) 
{ 
    FILE *fp; 

    char line[200], search_string[] = "To:"; 

    fp = fopen(filename, "r"); 

    if (!fp) { 
    perror("could not find the file"); 
    exit(0); 
    } 

    while (fgets(line, 200, fp) != NULL) { 
    if (strstr(line, search_string)) 
     fputs(line, stdout); 
    } 

    fclose(fp); 
} 


int main() {  
    DIR* p; 
    struct dirent* pp; 
    p = opendir("./"); 

    if (p != NULL) { 

     while ((pp = readdir(p)) != NULL) { 
      int length = strlen(pp->d_name); 
      if (strncmp(pp->d_name + length - 4, ".txt", 4) == 0) 
       CheckFile(pp->d_name); 
     } 

     (void)closedir(p); 
    } 

    return 0; 
} 
+0

Ich weiß, ich muss viele Dinge verbessern, aber jetzt habe ich eine Idee, was zu tun ist. Danke für Ihre Hilfe! –

Verwandte Themen