0

特定のフォルダーを通過し、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();
}
4

1 に答える 1

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.
        }
}
于 2012-04-16T22:37:39.480 に答える