Ignore:
Timestamp:
Jan 10, 2018, 11:06:11 PM (13 months ago)
Author:
faldebey
Message:

Update to CoRE testing system

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/combine/ugrep.cpp

    r5614 r5825  
    22#include <iostream>
    33#include <fstream>
     4#include <cstring>
    45
    56using namespace std;
     7
     8bool hasFlag(int argc, char *argv[], string flag){
     9        for (int i = 0;i < argc; i++){
     10                string e = argv[i];
     11                if (flag == e){
     12                        return true;
     13                }
     14        }
     15        return false;
     16}
    617
    718int main(int argc, char *argv[]) {
     
    920        UnicodeString str2match;
    1021        string fileName;
    11         uint32_t caseInsensitive = 0;
    12         if (argc == 3 || argc == 4){
    13                 re = argv[argc-2];
    14                 fileName = argv[argc-1];
    15                 if (argc == 4 && strcmp(argv[1], "-i") == 0) {
    16                         caseInsensitive = 2;
    17                 }
     22        uint32_t caseInsensitive = hasFlag(argc, argv, "-i")? 2 : 0;
     23        bool countOnly = hasFlag(argc, argv, "-c");
     24        bool invertedMatch = hasFlag(argc, argv, "-v");
     25        bool lineMatch = hasFlag(argc, argv, "-x");
     26        bool wordMatch = hasFlag(argc, argv, "-w");
     27
     28        re = argv[argc-2];
     29        fileName = argv[argc-1];
     30       
     31        if (lineMatch){
     32                re = "^" + re + "$";
    1833        }
    19         else {
    20                 cerr << "Usage: ugrep [regex] [-i] [file name]\n";
    21                 return 0;
     34        if (wordMatch){
     35                re = "\\b" + re + "\\b";
    2236        }
    2337       
     
    2741        RegexMatcher *matcher = new RegexMatcher(uRE, caseInsensitive, status);
    2842        if (U_FAILURE(status)) {
    29             cerr << "syntax error for ugrep\n";
     43        cerr << u_errorName(status) << endl;
    3044            return 0;
    3145        }
     
    4458                matcher->reset(str2match);
    4559                if (matcher->find()) {
    46                         count++;
     60                        if (!invertedMatch){
     61                                if (countOnly){
     62                                        count ++;
     63                                }
     64                                else{
     65                                        std::string ustr;
     66                                        str2match.toUTF8String(ustr);
     67                                        cout << ustr << endl;
     68                                }
     69                        }
     70                }
     71                else {
     72                        if (invertedMatch){
     73                                if (countOnly){
     74                                        count ++;
     75                                }
     76                                else{
     77                                        std::string ustr;
     78                                        str2match.toUTF8String(ustr);
     79                                        cout << ustr << endl;
     80                                }
     81                        }
    4782                }
    4883        }
    49 
    50        
    51        
    52         cout << count << endl;
     84        if (countOnly){
     85                cout << count << endl;
     86        }
     87        inputFile.close();
    5388        return 0;
    5489}
Note: See TracChangeset for help on using the changeset viewer.