source: icGREP/icgrep-devel/icgrep/combine/ugrep.cpp @ 5825

Last change on this file since 5825 was 5825, checked in by faldebey, 14 months ago

Update to CoRE testing system

File size: 1.7 KB
Line 
1#include <unicode/regex.h>
2#include <iostream>
3#include <fstream>
4#include <cstring>
5
6using 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}
17
18int main(int argc, char *argv[]) {
19        string re;
20        UnicodeString str2match;
21        string fileName;
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 + "$";
33        }
34        if (wordMatch){
35                re = "\\b" + re + "\\b";
36        }
37       
38        UErrorCode status = U_ZERO_ERROR;
39        UnicodeString uRE;
40        uRE.setTo(re.c_str());
41        RegexMatcher *matcher = new RegexMatcher(uRE, caseInsensitive, status);
42        if (U_FAILURE(status)) {
43        cerr << u_errorName(status) << endl;
44            return 0;
45        }
46
47        ifstream inputFile;
48        inputFile.open(fileName);
49        if (!inputFile.is_open()){
50                cerr << "input file not found\n";
51            return 0;
52        }
53        string line;
54        int count = 0;
55        while (getline(inputFile, line)){
56                UnicodeString str2match;
57                str2match.setTo(line.c_str());
58                matcher->reset(str2match);
59                if (matcher->find()) {
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                        }
82                }
83        }
84        if (countOnly){
85                cout << count << endl;
86        }
87        inputFile.close();
88        return 0;
89}
Note: See TracBrowser for help on using the repository browser.