2017-02-09 18 views
0

Я не знаю, как решить эту проблему. У меня есть эта функция, которая печатает все файлы .txt, которые у меня есть, но мне также нужно искать и печатать после каждого имени файла некоторые конкретные строки (каждого файла), содержащие какое-то слово. Это часть, которая печатает имя файлов.Search_string в цикле разных файлов в 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; 
} 

мне нужно искать какие-то конкретные слова (три слова) и напечатать строку, где содержатся, это было бы три разные линии.

Прямо сейчас программа печатает это:

0_email.txt 
1_email.txt 

Внутри этих файлов, которые, как электронная почта, мне нужно распечатать ситемы дату, когда они были отправлены (Дата :), который (To :) и тему (Предмет:). Эта информация не всегда находится в одной строке. Я пробовал этот код, который искал слово, но я не могу выполнить поиск программы во всех файлах (потому что эти файлы могут увеличиваться и иметь разные имена, нет, я не могу это назвать по имени) и искать несколько раз

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); 

Этот второй код является один, что я нашел в Интернете, я просто научиться программирования C, и я не очень хорошо знаком с ним.

Благодарим за помощь!

+0

Не могли бы вы быть более конкретным и показать нам пример? –

+0

Итак, для '.txt' файлов вам нужно открыть их и прочитать часть файла и распечатать его? Тогда почему бы вам не попробовать, а не просто печатать имя файла? –

+0

У меня есть дополнительная информация. –

ответ

0

Вам нужно узнать о функциях.

Вы примерно нужно следующее:

Это непроверенный код, и есть еще много improvments, что должно быть сделано. Это не точно то, что вы хотите, и я даже не уверен, если он компилирует, но это должно дать вам представление о том, что вам нужно сделать:

#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

Я знаю, что мне нужно много чего улучшить, но теперь у меня есть идея, что делать. Спасибо за вашу помощь! –