Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* (c) VlaoMao
- * RU, 2012
- *
- *
- *
- */
- #include <QApplication>
- #include <QFile>
- #include <QTextCodec>
- #include <QTextStream>
- #include <iostream>
- void printToStd(QMap<QString,int> map);
- void printToFile(QMap<QString,int> map,QString fileName);
- QString fileName;
- double all = 0;
- int main(int argc,char* argv[])
- {
- QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
- if(argc == 1)
- {
- printf("Корявенькая реализация подсчёта частоты появления символов в файле");
- printf("\nИспользование: ./symbols filename\n");
- printf("Из подсчёта исключаются символы \\r, \\n, \\t\n");
- exit(EXIT_FAILURE);
- }
- fileName = QString::fromLocal8Bit(argv[1]);
- bool toFile = false;
- QString saveFileName;
- if((argc > 2) && (QString(argv[2]) == QString("-f")))
- {
- toFile = true;
- saveFileName = argv[3];
- }
- QFile file;
- file.setFileName(fileName);
- if(!file.open(QIODevice::ReadOnly))
- {
- printf("Ошибка открытия файла: %s\n",fileName.toStdString().c_str());
- exit(EXIT_FAILURE);
- }
- QTextStream stream(&file);
- QMap<QString,int> syms;
- while(!stream.atEnd())
- {
- QString readedSymbol = stream.read(1);
- QString::iterator it = readedSymbol.begin();
- for(; it != readedSymbol.end(); ++it)
- {
- if((*it != '\n') && (*it != '\r') && (*it != '\t'))
- {
- ++all;
- QString sym = (*it).toUpper();
- QMap<QString,int>::iterator it = syms.find(sym);
- if(it == syms.end())
- {
- syms.insert(sym,1);
- }else{
- syms[sym]++;
- }
- }
- }
- }
- if(!toFile)
- printToStd(syms);
- else
- printToFile(syms,saveFileName);
- exit(EXIT_SUCCESS);
- }
- void printToStd(QMap<QString, int> map)
- {
- printf("Всего символов в файле %s : \033[05m%d\033[00m\n",fileName.toStdString().c_str(),(int)all);
- if(all == 0)
- return ;
- QMap<QString,int>::iterator strIt = map.begin();
- printf("-------------------------------------------\n");
- for(; strIt != map.end(); ++ strIt)
- {
- const char* s = strIt.key().toStdString().c_str();
- if(*s == ' ')
- printf("| Символ: |\033[32m' '\033[00m");
- else
- printf("| Символ: | \033[32m%s\033[00m ",s);
- printf("| 0x%04x ",*((QString)strIt.key()).toStdWString().c_str());
- printf("| \033[93m%5d\033[00m | ",strIt.value());
- printf("\033[33m%6f\033[00m | \n",strIt.value()/all);
- }
- printf("-------------------------------------------\n");
- }
- void printToFile(QMap<QString, int> map, QString fileName)
- {
- if(all == 0)
- return ;
- QFile file;
- file.setFileName(fileName);
- if(!file.open(QIODevice::WriteOnly))
- exit(EXIT_FAILURE);
- QTextStream stream(&file);
- stream << QString().sprintf("Всего символов в файле %s : %d\n",fileName.toStdString().c_str(),(int)all);
- QMap<QString,int>::iterator strIt = map.begin();
- stream << QString("-------------------------------------------\n");
- for(; strIt != map.end(); ++ strIt)
- {
- QString s = strIt.key();
- if(s.indexOf(" ") != -1)
- stream << QString("| Символ: |' '");
- else
- stream << QString("| Символ: | %1 ").arg(s);
- stream << QString().sprintf("| 0x%04x ",*((QString)strIt.key()).toStdWString().c_str());
- stream << QString().sprintf("| %5d | ",strIt.value());
- stream << QString().sprintf("%6f | \n",strIt.value()/all);
- }
- stream << QString("-------------------------------------------\n");
- stream.flush();
- file.close();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement