Ik heb de code geformatteerd. Er is code aan toegevoegd. Probleem is dat er geen weergave is als met de -f optie een file word meegegeven als argument. bij geen file en dus input van een pipe komt, is er wel weergave.
Hier de code:
/*dit programma filterd commentaar van configuratiebestanden eruit.
opties voor language
lscode [-l language] [-f file]
Werkt nog niet met inline commentaar.
*/
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
string language = "conf";
// deze variabele word false indien commentaar met /* .. */ (hiermee kan commentaar meerdere regels zijn)
bool r_cpp = true;
//iscode geeft false terug als een lijn commentaar is.
bool iscode (string line)
{
bool r = true;
int l;
l = line.length();
if (language == "conf")
{
if (l >= 1 && (line[0]=='#' || line[0] == ';'))
{
r = false;
}
else
{
r = true;
}
}
else if (language == "c++")
{
if (l >= 2)
{
if (line[0] == '/' && line[1] == '/'){r = false;}
if (line[0] == '/' && line[1] == '*'){r_cpp = false;}
if(line[l-2] == '*' && line[l-1] == '/'){r = false;r_cpp = true;}
if (r_cpp == false){r = false;}
}
}
if (line.empty())
{
r = false;
}
return r;
}
string usage (string programname)
{
string use;
use = "Usage: " + programname + " [-l language] [-f file]";
return use;
}
int main (int argc, char* argv[])
{
string lineInput;
char* file = NULL;
istream * input = NULL;
// weergave van het gebruik van het programma met optie --help
if (argc > 1 && string(argv[1]) == "--help"){cout << usage(argv[0]) << endl; return 0;}
// Argumenten van commandline inlezen.
for (int i=1; i < argc; i++)
{
if (string(argv[i]) == "-l" && i < argc - 1 )
{
i += 1;
language = string(argv[i]);
}
else if (string(argv[i]) == "-f" && i < argc -1)
{
i += 1;
file = argv[i];
}
}
// Als geen file als argument word gegeven, dan input van pipeline
if (file == NULL)
{
input = &cin;
}
else
{
//betand inlezen.
ifstream fin (file);
input = &fin;
}
while (getline(*input,lineInput))
{
if (iscode(lineInput))
{
cout << lineInput << endl;
}
}
}