extratorTXT.cpp
2.81 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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/***************************************************************************
* Universidade Federal da Paraíba *
* Copyright (C) 2014 by Laboratório de Aplicações de Vídeo Digital *
* *
* Centro de Informática - UFPB - Campus I *
* João Pessoa - PB - Brasil *
* *
* Author: Erickson Silva (erickson.silva@lavid.ufpb.br) *
* *
**************************************************************************/
#include "extratorTXT.h"
ExtratorTXT::ExtratorTXT(){
listeners = new list<ListenerTXT*>();
finish = false;
PRINTL(util::_DEBUG, "ExtratorTXT Done!\n");
}
ExtratorTXT::~ExtratorTXT(){
listeners->clear();
delete listeners;
PRINTL(util::_DEBUG, "ExtratorTXT finalized!\n");
}
void ExtratorTXT::addListener(ListenerTXT* listener){
listeners->push_back(listener);
}
void ExtratorTXT::notifyListeners(unsigned char* line) {
for(list<ListenerTXT*>::iterator it = listeners->begin(); it != listeners->end(); it++){
(*it)->notifyLine(line);
}
}
void ExtratorTXT::notifyEndExtraction(int size) {
PRINTL(util::_DEBUG, "ExtratorTXT concluiu a extração: %d linhas.\n", size);
for(list<ListenerTXT*>::iterator it = listeners->begin(); it != listeners->end(); it++){
(*it)->notifyEnd(size);
}
}
void ExtratorTXT::encodingfiletoUTF8() {
string recmd = "recode ";
recmd.append("$(file --mime-encoding -b ")
.append(this->filePath).append(")..utf-8 ")
.append(this->filePath);
system(recmd.c_str());
string sedcmd = "sed -i 's/\\r//' ";
sedcmd.append(this->filePath);
system(sedcmd.c_str());
}
void ExtratorTXT::setFilePath(char* path){
this->filePath = path;
encodingfiletoUTF8();
}
void ExtratorTXT::initialize(){
ifs_.open(this->filePath, std::ifstream::in);
if(!(ifs_.is_open() && ifs_.good())) {
finish = true;
Logging::instance()->writeLog("extratorTXT.cpp <Error>: Arquivo de texto não encontrado.");
throw ExtratorException("Falha ao abrir o arquivo de texto! Verifique se o mesmo existe.");
}
this->Start();
}
bool ExtratorTXT::isFinished(){
return finish;
}
void ExtratorTXT::Run(){
PRINTL(util::_INFO, "Extraindo Texto...\n");
int line_index = 0;
string current_line;
while (ifs_.good()) {
getline(ifs_, current_line, '\n');
if (current_line.length() != 0) {
notifyListeners((unsigned char*) current_line.c_str());
line_index++;
}
}
finish = true;
notifyEndExtraction(line_index);
}