Line data Source code
1 : #include "file_handler.h"
2 :
3 : using namespace std;
4 :
5 :
6 : vector<string> *token_stack = NULL;
7 : ifstream *fp = NULL;
8 :
9 663 : void init_token_stack()
10 : {
11 663 : if (token_stack == NULL) {
12 663 : token_stack = new vector<string>;
13 663 : }
14 663 : }
15 :
16 0 : void close_file(ifstream *fp)
17 : {
18 :
19 0 : fp->close();
20 :
21 0 : }
22 :
23 :
24 663 : ifstream *open_file(string file_name)
25 : {
26 :
27 663 : fp = new ifstream();
28 663 : fp->open(file_name.c_str());
29 :
30 663 : if (fp->is_open()) {
31 663 : init_token_stack();
32 663 : return fp;
33 :
34 : } else {
35 0 : cout << "Unable to open file" << endl;
36 0 : close_file(fp);
37 0 : return NULL;
38 : }
39 663 : }
40 :
41 :
42 :
43 :
44 663 : void empty_token_stack()
45 : {
46 : // opote adeiazei to stack to programma paei kai tsimpaei nea grammi
47 : // apo to arxeio
48 663 : token_stack->erase(token_stack->begin(), token_stack->end());
49 663 : }
50 :
51 171376 : void trim(string *s)
52 : {
53 171376 : size_t p = s->find_first_not_of(" \t");
54 171376 : s->erase(0, p);
55 :
56 171376 : p = s->find_last_not_of(" \t");
57 171376 : if (string::npos != p)
58 170845 : s->erase(p+1);
59 171376 : }
60 :
61 171376 : string *read_line(string *line)
62 : {
63 :
64 171376 : if (fp->good()) {
65 :
66 171376 : getline(*fp, *line);
67 171376 : trim(line);
68 :
69 : //cout << "line: " << *line << endl;
70 :
71 171376 : } else {
72 0 : line->clear();
73 : }
74 171376 : return line;
75 : }
76 :
77 663 : void go_to_next_line()
78 : {
79 663 : empty_token_stack();
80 663 : }
81 :
82 :
83 403863 : int is_blank(string token)
84 : {
85 403863 : size_t value = 0;
86 :
87 403863 : if (token.find_first_not_of("\t\n ") == string::npos) {
88 : //string is blank
89 0 : value = 1;
90 0 : }
91 :
92 403863 : return value;
93 :
94 : }
95 :
96 :
97 :
98 170845 : void tokenize_line(string line)
99 : {
100 :
101 170845 : size_t next = 0;
102 170845 : size_t prev = 0;
103 170845 : string delimiter = " ";
104 170845 : string substring;
105 :
106 403863 : while ((next = line.find_first_of(delimiter, prev)) != string::npos) {
107 :
108 233018 : if (next - prev != 0) {
109 :
110 233018 : substring = line.substr(prev, next - prev);
111 :
112 233018 : if (!is_blank(substring)) {
113 :
114 233018 : token_stack->push_back(substring);
115 233018 : }
116 233018 : }
117 233018 : prev = next + 1;
118 : }
119 :
120 170845 : if (prev < line.size()) {
121 :
122 170845 : substring = line.substr(prev);
123 :
124 170845 : if (!is_blank(substring)) {
125 :
126 170845 : token_stack->push_back(substring);
127 :
128 170845 : }
129 170845 : }
130 170845 : }
131 :
132 :
133 403005 : string get_token()
134 : {
135 :
136 403005 : string value, line;
137 :
138 :
139 403005 : if (!token_stack->empty()) {
140 231629 : value = token_stack->front();
141 231629 : token_stack->erase(token_stack->begin());
142 231629 : } else {
143 171376 : read_line(&line);
144 171376 : if (line.size() != 0) {
145 170845 : tokenize_line(line);
146 170845 : value = token_stack->front();
147 170845 : token_stack->erase(token_stack->begin());
148 170845 : }
149 : }
150 :
151 : //cout << "tokn: " << value << endl;
152 403005 : return value;
153 :
154 403005 : }
|