Программа создания пустого выходного файла - PullRequest
0 голосов
/ 14 марта 2012

Итак, я работал над программой, похожей на grep.Это будет искать данный файл и затем возвращать все строки с экземплярами нужного вам слова вместе с номером строки, где оно произошло.Я придумал это:

#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 query = argv[1]; 
string inputFileName = argv[2];
string outFileName = argv [3];
regex reg(query);

// 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;
}



 ofstream outFile (outFileName);
 outFile.open( outFileName + ".txt" );
// if( !outFile ){
  //          cout << "Error: failed to create output file at " << outFileName << ".txt\n";
   //         return EXIT_FAILURE;
 //   }


//Create a vector of string to hold each line
vector<string> lines;

//Create a while loop that puts each line into the vector lines
string currentLine = "";
int currentLineNum = 0;

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



}
    outFile.close();
    infile.close();
}

Когда я запускаю его, он делает файл, но файлы остаются пустыми, я уверен, что я ищу в файле, поэтому я думаю, что я 'где-то здесь мы допустили логическую ошибку.У меня нет никакого опыта в создании выходных файлов, но то, что я написал, казалось, соответствовало синтаксису того, что я прочитал.Любой совет, который вы, ребята, можете дать, будет очень оценен.

1 Ответ

1 голос
/ 14 марта 2012

Посмотрите на следующие две строки, почему вы вызываете конструктор, а затем вызываете open?

ofstream outFile (outFileName); // This does same thing as member function open
outFile.open( outFileName + ".txt" ); // <-- remove this line unnecessary 

Во второй строке произойдет сбой и будет установлен бит, поэтому поток находится в плохом состоянии (также у вас есть out.txt.txt).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...