clean up and adding support to read from files

master
Micke Nordin 13 years ago
parent 2ef88b0c0f
commit b2cef5ac1e

@ -3,8 +3,8 @@ CFLAGS=-c -g -Wall
CCFLAGS=-g -Wall CCFLAGS=-g -Wall
prefix=/usr/local prefix=/usr/local
begin : main.o begin.o args.o begin : main.o begin.o
$(CC) -o begin $(CCFLAGS) main.o begin.o args.o $(CC) -o begin $(CCFLAGS) main.o begin.o
main.o: main.cxx begin.o main.o: main.cxx begin.o
$(CC) $(CFLAGS) main.cxx $(CC) $(CFLAGS) main.cxx
@ -12,9 +12,6 @@ main.o: main.cxx begin.o
begin.o: begin.cxx begin.hpp begin.o: begin.cxx begin.hpp
$(CC) $(CFLAGS) begin.cxx $(CC) $(CFLAGS) begin.cxx
args.o: args.cxx args.hpp
$(CC) $(CFLAGS) args.cxx
install: begin install: begin
install -m 0755 begin $(prefix)/bin install -m 0755 begin $(prefix)/bin

@ -1,65 +0,0 @@
/*
* args.cxx
*
* Copyright 2011 Micke Nordin <micke@hal>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
#include <iostream>
#include <fstream>
#include "args.hpp"
using namespace std;
args::args(int argc, char **argv) {
iscaseinsence = false;
isregex = false;
havefile = false;
filename = "";
int c;
while ((c = getopt (argc, argv, "efi:")) != -1) {
switch (c) {
case 'e':
isregex = true;
break;
case 'f':
filename = optarg;
havefile = true;
break;
case 'i':
iscaseinsence = true;
break;
case '?':
if (optopt == 'f') {
cerr << "Option -" << optopt << " requires an argument.\n";
}
else if (isprint (optopt)) {
cerr << "Unknown option `-" << optopt << ".\n";
}
else {
cerr << "Unknown option character `\\x" << optopt << ".\n";
}
// default:
// abort ();
}
}
}
void args::print() {
cout << "Case inscensitive: " << iscaseinsence << " Regex: " << isregex << " Have a file: " << havefile << " filename: " << filename;
}

@ -1,41 +0,0 @@
/*
* args.cxx
*
* Copyright 2011 Micke Nordin <micke@hal>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
#ifndef args_h
#define args_h
#include <iostream>
#include <fstream>
using namespace std;
class args {
public:
bool iscaseinsence; //-i
bool isregex; // -e
bool havefile; // -f
string filename; // filename
args(int argc, char **argv); //Konstruktor
void print(); //Skriver ut objektet
};
#endif

@ -1,7 +1,7 @@
/* /*
* begin.cxx * begin.cxx
* *
* Copyright 2011 Micke Nordin <micke@hal> * Copyright 2011 Micke Nordin <mik@elnord.in>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -23,20 +23,21 @@
#include <iostream> #include <iostream>
#include <string> #include <string>
#include <boost/xpressive/xpressive.hpp> #include <boost/xpressive/xpressive.hpp>
#include <fstream>
using namespace std; using namespace std;
void begin(string needle) void begin(string needle, istream &in)
{ {
string input; string input;
boost::xpressive::sregex regex = boost::xpressive::sregex::compile( needle, boost::xpressive::regex_constants::icase ); boost::xpressive::sregex regex = boost::xpressive::sregex::compile( needle, boost::xpressive::regex_constants::icase );
while(cin) { while(in) {
getline(cin, input); getline(in, input);
if ( boost::xpressive::regex_search(input, regex) ) { if ( boost::xpressive::regex_search(input, regex) ) {
cout << input << endl; cout << input << endl;
while(cin) { while(in) {
getline(cin,input); getline(in,input);
cout << input << endl; cout << input << endl;
} }
} }

@ -1,7 +1,7 @@
/* /*
* begin.hpp * begin.hpp
* *
* Copyright 2011 Micke Nordin <micke@hal> * Copyright 2011 Micke Nordin <mik@elnord.in>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -22,10 +22,11 @@
#define begin_h #define begin_h
#include <iostream> #include <iostream>
#include <string> #include <string>
#include <fstream>
using namespace std; using namespace std;
void begin(string needle); void begin(string needle, istream &in);
#endif #endif

@ -1,7 +1,7 @@
/* /*
* main.cxx * main.cxx
* *
* Copyright 2011 Micke Nordin <micke@hal> * Copyright 2011 Micke Nordin <mik@elnord.in>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -22,15 +22,18 @@
#include <iostream> #include <iostream>
#include "begin.hpp" #include "begin.hpp"
#include "args.hpp"
using namespace std; using namespace std;
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
args myargs(argc, argv);
if( argc == 2) { if( argc == 2) { //assume the argument is a regex and to read from std in
begin(argv[1]); begin(argv[1], cin);
} else if( argc == 3) { //assume the first argument is a regex and second is a filename
ifstream in(argv[2]);
begin(argv[1], in);
} else {
cout << "Usage: begin <regex> [filename] \n";
} }
return 0; return 0;
} }

Loading…
Cancel
Save