2012-03-14 5 views
0

Итак, я работаю над программой, подобной 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(); 
} 

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

+0

Пробовал ли вы использовать отладчик? –

+0

Просто общий отладчик Visual Studio, никаких ошибок не обнаружено. – Sh0gun

+0

Ошибок не было? Что это значит? Ясно, что есть ошибка, или ваша программа будет работать, правильно? –

ответ

1

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

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

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

Смежные вопросы