|
|
|
![]() |
|
Strumenti |
![]() |
#21 | |
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
Quote:
![]() ![]() ![]() in Fortran invece sono 10 (dieci) ![]() |
|
![]() |
![]() |
![]() |
#22 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Stavolta allora facci...ma in Fortran e non in uno dei suoi dialetti...un programma equivalente a quello fatto da PGI e con una interfaccia grafica simile... Però stavolta lo pretendo
![]() |
![]() |
![]() |
![]() |
#23 |
Senior Member
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
|
sisi altrimenti ban
![]() |
![]() |
![]() |
![]() |
#24 |
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Se interessa vi posto il codice di un accessorio per i filechooser che permette di ricercare un file, come in allegato:
![]() Però sono 6 classi ![]() |
![]() |
![]() |
![]() |
#25 |
Senior Member
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
|
che c'entra con l'argomento scusa?
![]() per rimanere IT ( ![]() Codice:
#include <iostream> #include <vector> #include <algorithm> #include <iterator> #include <fstream> using namespace std; struct shellinput { vector<string> filelist_; string t_file_; string o_file_; void parseinput(int argc, char **argv) { for(int i = 1; i < argc; i++) { if(strcmp(argv[i], "-t") == 0) t_file_ = argv[++i]; if(strcmp(argv[i], "-o") == 0) o_file_ = argv[++i]; else filelist_.push_back(argv[i]); } } }; class sorter { public: sorter(vector<string> &v) : v_(v) {} void operator() (string &filename) { ifstream fs(filename.c_str()); if(!fs.is_open()) { cout << "file \"" << filename << "\" error" << endl; return; } copy(istream_iterator<string>(fs), istream_iterator<string>(), inserter(v_, v_.end())); sort(v_.begin(), v_.end()); } private: vector<string> &v_; }; class transformer { public: transformer(string &filename) { ifstream fs(filename.c_str()); if(fs.is_open()) { copy(istream_iterator<string>(fs), istream_iterator<string>(), inserter(bannedstring_, bannedstring_.end())); } } void operator() (string &str) { basic_string <char>::size_type index; for(vector<string>::iterator it = bannedstring_.begin(); it != bannedstring_.end(); it++) { index = str.find(*it); if(index != basic_string <char>::npos) str.replace(index, (*it).size(), ""); } } private: vector<string> bannedstring_; }; class printer { public: printer(string &filename) { of = NULL; if(filename != "") { of = new ofstream; if(of != NULL) { of->open(filename.c_str()); if(of->is_open()) { cout_buf = cout.rdbuf(); cout.rdbuf(of->rdbuf()); } else cout << "WRN: error opening file \"" << filename << "\", output redirected to stdout" << endl; } } } ~printer() { if(of != NULL) { cout.rdbuf(cout_buf); if(of->is_open()) of->close(); // delete of; ???????? } } void operator() (string &str) { cout << str << endl; } private: ofstream *of; streambuf *cout_buf; }; int main(int argc, char** argv) { if (argc == 1) { cout << "usage:\tsort [OPTION] [FILE ...]" << endl; cout << "option:\t -t [file] specify a file containing a list of string which must not be printed" << endl; cout << "option:\t -o [file] specify where to write the output (standard output is default)" << endl; return -1; } shellinput sh; sh.parseinput(argc, argv); vector<string> v; for_each(sh.filelist_.begin(), sh.filelist_.end(), sorter(v)); for_each(v.begin(), v.end(), transformer(sh.t_file_)); for_each(v.begin(), v.end(), printer(sh.o_file_)); return 0; } si usa così: Es 1. StringSort file1.txt file2.txt file3.txt legge il contenuto dei 3 file, lo ordina e lo stampa a video Es 2. StringSort -t no.txt file1.txt file2.txt file3.txt legge il contenuto dei 3 file, lo ordina, rimuove tutte le stringhe contenute nel file no.txt dal risultato ordinato e lo stampa a video per scrivere il risultato su file ci sono 2 modi: StringSort file1.txt file2.txt file3.txt > risultato.txt oppure StringSort -o risultato.txt file1.txt file2.txt file3.txt sono 150 righe, ma con interfaccia (shell, che per sta roba secondo me è più comoda ![]() ![]() Ultima modifica di ri : 09-03-2004 alle 11:42. |
![]() |
![]() |
![]() |
#26 |
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Ho visto che utilizzava un filechooser pensavo potsse essere utile approfondire.
|
![]() |
![]() |
![]() |
#27 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Via ragazzi, non accaniamoci contro una cosa fatta in quattro e quattr'otto..
![]() La prossima volta che ci rimetto mano lo allungo almeno del doppio (con le stesse funzioni, commenti esclusi), in modo da ottenere un codice decente (perchè così com'è è indegno, ma non pensavo che tutto il forum ne avrebbe fatto l'autopsia ![]() |
![]() |
![]() |
![]() |
#28 |
Senior Member
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
|
ricorda, le GUI sono la rovina dei software
![]() |
![]() |
![]() |
![]() |
#29 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
![]() tengo a precisare che verrebbe lungo il doppio non per l'interfaccia, ma per rendere il codice di facile manutenzione e predisposto perchè le sue funzionalità siano estese. Al di là dello specifico software, appare chiaro che, così com'è è strutturato, se capitasse in mano un domani ad un altro programmatore mi tirerebbe 3 accidenti al minuto. Doveva essere una cosa "in sordina", quà è saltata fuori l'occhiuta crèm-de-la-crèm a puntar dita nelle piaghe, mi sento in imbarazzo... Bisogna avvertire le "nuove leve": non pensate che nella realtà si programmi come nel codice che ho postato, quello è un "codice tra amici", se ci mettete altre 20 linee diventa "spaghetti-code" (che ch'avranno stì americano contro gli spaghetti... ![]() |
![]() |
![]() |
![]() |
#30 |
Senior Member
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
|
vedi, vedi, almeno usando c++ con le STL il codice è autoparlante e non puoi scriverlo male, altrimenti manco ti compila
![]() |
![]() |
![]() |
![]() |
#31 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
![]() La preghiera che ogni programmatore recita la sera prima di andare a letto finisce proprio con "...e fa sì che non mi debba mai capitare di aggiornare del codice autoparlante, amen". |
![]() |
![]() |
![]() |
#32 |
Senior Member
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
|
d'oh
![]() |
![]() |
![]() |
![]() |
#33 |
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
Piccolo contributo
Ciao ri,
puoi ridurre ancora il codice usando il "set" al posto del "vector" poichè mantiene costantemente ordinata la lista e non hai bisogno di "sortarlo".Probabilmente non hai bisogno neanche di function object comparatore. ![]() E' in casi come questi che il set si rileva come + veloce del vector. |
![]() |
![]() |
![]() |
#34 |
Senior Member
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
|
uhm, hai ragione
comunque non sto usando functor comparatori, il 'sorter' è solo un modo comodo per leggere il file e inserirlo nel vettore grazie per l'appunto ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:52.