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