questo mio cod funziona egregiamente ma...
codice:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>
#include <iomanip>
using namespace std;
string intToString(int value) {
stringstream ss;
ss << value;
return ss.str();
}
string floatToString(float value) {
stringstream ss;
ss << value;
return ss.str();
}
int main (int argc, char *argv[]) {
//dichiarazioni...
vector <string> vec;
vector <string> vec2;
int contapunti=0;
int presenze=0;
int conteggio=0;
vector <int> ritardi;
int contaestrazioni=0;
vector <string> riassunto;
//---------------------
cout << "\n\n\n";
cout << "Programma created by Lotto_tom75.\nOgni diritto riservato.\n\n";
cout << "\n\n\n";
cin.get();
ifstream fin("quaterneuscite.txt");
if (fin) {
string s;
while(fin) // cattura tutti gli errori.
{
getline(fin,s);
//cout << s;
vec.push_back(s);
}
}
int sz = vec.size()-1;
ifstream f2in("estrazioni.txt");
if (f2in) {
string s;
while(f2in) // cattura tutti gli errori.
{
getline(f2in,s);
//cout << s;
vec2.push_back(s);
}
}
int sz2 = vec2.size()-1;
for (int z=0; z<sz; z++) {
string testo,estratta;
vector<string> token;
int inizio,fine,i,lparola;
bool continua;
testo = vec[z];
continua = true;
inizio = -1; /*1*/
while(continua){
fine = testo.find(',',inizio+1);
if(fine==-1){
continua = false;
fine = testo.length();
}
// Estrazione parola
lparola = (fine-inizio)-1;
estratta = testo.substr(inizio+1,lparola);
token.push_back(estratta);
inizio = fine;
}
for (int z2=0; z2<sz2; z2++) {
string testo2,estratta2;
vector<string> token2;
int inizio2,fine2,x,lparola2;
bool continua2;
testo2 = vec2[z2];
continua2 = true;
inizio2 = -1; /*1*/
while(continua2){
fine2 = testo2.find(',',inizio2+1);
// ultima parola
if(fine2==-1){
continua2 = false;
fine2 = testo2.length();
}
// Estrazione parola
lparola2 = (fine2-inizio2)-1;
estratta2 = testo2.substr(inizio2+1,lparola2);
token2.push_back(estratta2);
inizio2 = fine2;
}
for(x=0;x<token2.size();x++)
//CONTROLLO EVENTUALI VALORI UGUALI E AGGIORNAMENTO INDICI RELATIVI xE (conteggio) e xA (conteggio2)..
for (int y=0; y<token2.size();y++) {
for (x=0; x<token.size();x++) {
if (token2.at(y)==token.at(x)) {
//cout << "VALORE/I UGUALE/I: ";
//cout << token2.at(y);
//cout << "Vs";
//cout << token.at(x);
//cin.get();
contapunti++;
}
else
{
//cout << "VALORE/I DIVERSO/I: ";
//cout << token2.at(y);
//cout << "Vs";
//cout << token.at(x);
//cin.get();
}
}
}
contaestrazioni++;
//cout << "PUNTI X QUESTA QUATERNA: ";
//cout << contapunti;
//cout << "\n";
if (contapunti==2) {
presenze++;
conteggio=0;
ritardi.push_back(conteggio);
//cin.get();
}
else {
conteggio++;
ritardi.push_back(conteggio);
}
cout << "tutti i ritardi per questa estrazione: ";
for (int i=0; i< ritardi.size(); i++)
{
//cout << ritardi[i];
//cout << ",";
}
//prendo il valore massimo e il valore ultimo di ritardo della quaterna esaminata...
vector<int>::iterator max;
max = max_element(ritardi.begin(), ritardi.end());
cout << *max << endl;
cout << ritardi[ritardi.size()-1] << endl;
int ritardomassimo =*max;
cout << "\n";
cout << "ritardo massimo per questa quaterna: ";
cout << ritardomassimo;
int ritardoultimo = ritardi[ritardi.size()-1];
cout << "\n";
cout << "ritardo ultimo per questa quaterna: ";
cout << ritardoultimo;
int colpirimanenti = *max-(ritardi[ritardi.size()-1]);
cout << "\n";
cout << "colpi rimanenti per questa quaterna: ";
cout << colpirimanenti;
//cin.get();
//conversione in stringhe...
//string rapportorars2;
string contaestrazioni2;
string colpirimanenti2;
string ritardomassimo2;
string ritardoultimo2;
string presenze2;
colpirimanenti2 = intToString(colpirimanenti);
ritardomassimo2 = intToString(ritardomassimo);
ritardoultimo2 = intToString(ritardoultimo);
presenze2 = intToString(presenze);
//--------------------------
string stringariassuntiva = "presenze:"+presenze2+"°***quaterna:"+testo+"***"+" rs: "+ritardomassimo2+" ra: "+ritardoultimo2+" colpirimanenti: "+colpirimanenti2;
riassunto.push_back(stringariassuntiva);
//cin.get();
cout << "\n\n";
cout << "Quaterna : ";
cout << testo;
cout << "\n\n";
cout << "Elaborazione n. ";
cout << contaestrazioni;
cout << "\n";
//cin.get();
//RIAZZERO TUTTO X ANALIZZARE LA PROSSIMA QUATERNA...
//ritardi.clear();
//conteggio=0;
contapunti=0;
//contaestrazioni=0;
//presenze=0;
//riassunto.clear();
//presenze=0;
ritardomassimo=0;
ritardoultimo=0;
}
printf ("\a");
//SALVO IN UN FILE... il risultato dell'elaborazione quaterna... -------------------
ofstream fout;
fout.open("report-ritardi-quaterne-uscite-punti2.txt", ios::app);
string datoultimo= riassunto[riassunto.size()-1];
fout << datoultimo;
fout << "\n";
presenze=0;
riassunto.clear();
//----------------------------------------------------------------------------------
//RIAZZERO TUTTO X ANALIZZARE LA PROSSIMA QUATERNA...
ritardi.clear();
conteggio=0;
contapunti=0;
contaestrazioni=0;
presenze=0;
riassunto.clear();
presenze=0;
}
printf ("\a\a\a");
cout << "finish prima quaterna...";
cin.get();
}
Per la sua struttura (temo...) è incredibilmente lento...
(ci mette ca 6 giorni per confrontare le 22.000 righe ca del primo file con le 4600 righe dell'altro)
Penso che una struttura analoga ma con basi + pratiche e logiche possa essere enormemente più veloce ed ottenere i medesimi risultati...
Qualcuno/a è in grado di tentarne l'ottimizzazione in termini di velocità?
GRAZIE a tutti/e