2012-04-16 54 views
-1

我必須編寫一個程序,該程序將通過給定的文件夾並使用regex_search查找某個字符串的每個實例。我現在正在使用regex_search來處理它,我只是想弄清楚如何通過每個文件。我想用目錄來嘗試它,但我不確定放在哪裏。我必須通過文件搜索到我的主要方法,或者我必須創建一個單獨的函數之外的主要方法遍歷每個文件並在主要方法中調用它?對文件夾中的每個文件應用正則表達式搜索

這就是我現在擁有的。任何提示你們可以給如何解決這個問題將不勝感激!

現在它的功能是讀取輸入文本文件並輸出一個txt文件,該文件顯示所有實例和每個外觀的行號。我不需要查看它們所在的行,使用特定的文件,或爲此程序創建輸出文件,我發現的內容僅會打印到控制檯。我已經離開了我現在擁有的東西,因爲我不確定是否會以類似的方式檢查每個單獨的文件,只是使用不同的名稱。

#include <iostream> 
#include <regex> 
#include <string> 
#include <fstream> 
#include <vector> 
#include <regex> 
#include <iomanip> 

using namespace std; 

int main (int argc, char* argv[]){ 

// validate the command line info 
if(argc < 2) { 
    cout << "Error: Incorrect number of command line arguments\n" 
      "Usage: grep\n"; 
    return EXIT_FAILURE; 
} 

//Declare the arguments of the array 
    string resultSwitch = argv[1]; 
string stringToGrep = argv[2]; 
string folderName = argv [3]; 
regex reg(stringToGrep); 


// Validate that the file is there and open it 
ifstream infile(inputFileName); 
if(!infile) { 
    cout << "Error: failed to open <" << inputFileName << ">\n" 
      "Check filename, path, or it doesn't exist.\n"; 
    return EXIT_FAILURE; 
} 



while(getline(infile,currentLine)) 
{ 
    lines.push_back(currentLine); 
      currentLineNum++; 
      if(regex_search(currentLine, reg)) 
        outFile << "Line " << currentLineNum << ": " << currentLine << endl; 



} 

    infile.close(); 
} 
+0

爲什麼'lines'載體?你沒有使用它。 – m0skit0 2012-04-16 22:02:12

+0

是的,我已經擺脫了這一點,並改變了一些東西,開關在那裏,因爲在某些時候我需要開關。他們將只是我最後的關切。 – Sh0gun 2012-04-16 22:05:57

+0

你問關於程序的結構?如果你想要靈活的代碼,你必須分離每個邏輯結構/步驟。所以,'readFolder','readFile','SearchInFile'是最好的做法。另外,如果你知道一個類,寫OO設計的代碼 – gaussblurinc 2012-04-16 22:23:58

回答

3

讀取目錄/文件夾取決於操作系統。在UNIX/Linux的/ MacOS的世界中,你使用opendir()readdir()

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

...

DIR *directory = opendir(directoryName); 

if(directory == NULL) 
    { 
    perror(directoryName); 
    exit(-2); 
    } 
// Read the directory, and pull in every file that doesn't start with '.' 

struct dirent *entry; 
while(NULL != (entry = readdir(directory))) 
{ 
// by convention, UNIX files beginning with '.' are invisible. 
// and . and .. are special anyway. 
    if(entry->d_name[0] != '.' ) 
     { 
     // you now have a filename in entry->d_name; 
     // do something with it. 
     } 
} 
+0

這是否要求使用#include ? – Sh0gun 2012-04-16 22:46:16

+0

是的。包括上面添加。 – DRVic 2012-04-17 02:28:44

相關問題