-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cpp
More file actions
68 lines (60 loc) · 1.93 KB
/
Copy pathmain.cpp
File metadata and controls
68 lines (60 loc) · 1.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include "main.h"
struct fieldPattern{
unsigned int number;
FuzzyLib* matcher;
};
int main (int argc, char** argv) {
if (argc == 1) return 0;
CSVParser parser;
unsigned int numberOfPatterns;
vector<fieldPattern> patterns;
unsigned int paramPos = 1;
if (string(argv[1]) == string("-f")){
ifstream input(argv[2] , ifstream::in);
paramPos = 3;
if (string(argv[paramPos]) == string("-t")){
parser.TokenizeText(input);
++paramPos;
}else{
parser.ParseCSV(input);
}
}else{
if (string(argv[paramPos]) == string("-t")){
parser.TokenizeText(cin);
++paramPos;
}else{
parser.ParseCSV(cin);
}
}
numberOfPatterns = atoi(argv[paramPos]);
void *lib_handle;
lib_handle = dlopen("./levenshtein_automata.so", RTLD_NOW);
LevenshteinAutomata* (*Create)();
Create = (LevenshteinAutomata*(*)()) dlsym(lib_handle, "Create");
for (unsigned int i = paramPos + 1; i <= paramPos + numberOfPatterns * 3; i += 3){
fieldPattern pt;
pt.number = atoi(argv[i]);
string pattern = string(argv[i+1]);
unsigned int distance = atoi(argv[i+2]);
LevenshteinAutomata* alg = Create();
pt.matcher = new FuzzyLib(alg);
pt.matcher->SetPattern(pattern,distance);
patterns.push_back(pt);
}
while (! parser.AtEnd()){
vector<string> line = parser.GetNextLine();
bool matched = true;
for (unsigned int i = 0; i < patterns.size(); ++i){
unsigned int fieldNum = patterns[i].number;
if (! patterns[i].matcher->Match(line[fieldNum]))
matched = false;
}
if (matched){
for (unsigned int j = 0; j < line.size() - 1; ++j){
cout<< line[j] << ",";
}
cout<< line[line.size() - 1] << endl;
}
}
return 0;
}