• 5682阅读
  • 7回复

[提问]用QT 实现统计一个工程里面源文件和头文件的总行数,空各行和注释行的行数? [复制链接]

上一主题 下一主题
离线foxgod
 

只看楼主 倒序阅读 楼主  发表于: 2011-07-14
用QT图像界面 实现统计一个工程里面源文件和头文件的总行数,空各行和注释行的行数?
谁有源代码,怎么做呀!
离线XChinux

只看该作者 1楼 发表于: 2011-07-15
多搜索搜索,先用脚本实现,正则表达式。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线foxgod

只看该作者 2楼 发表于: 2011-07-25
回 1楼(XChinux) 的帖子
能给个思想吗??如果统计空白行和注释行!!
离线abcdlcq

只看该作者 3楼 发表于: 2011-07-25
用QTextStream处理,一行一行读取,还需要考虑行中是否存在//及/*、*/,以及存在/*对下一行的影响
离线abcdlcq

只看该作者 4楼 发表于: 2011-07-26
用栈来处理没准也可以
离线foxgod

只看该作者 5楼 发表于: 2011-07-27
bool Dialog::get_all_file_linenum(const char* dir_or_file)
{
    line_num=0;black_num=0;
    std::string d(dir_or_file);
    QString s(d.c_str());
    QDir p(s);
    if (!p.exists(s))
       return false;
    if(p.exists(s))

    {
        p.setFilter(QDir::Files|QDir::Dirs);
        p.setSorting(QDir::DirsFirst);
        list=p.entryInfoList();
        ui->progressBar->setRange(0,list.size()-1);
        ui->progressBar->setValue(0);
      for(int i=0;i<list.size();i++)
         {
            QFileInfo fi=list.at(i);
            ui->progressBar->setValue(i);
         if(fi.fileName()=="."||fi.fileName()=="..")
           {
              i++;
              continue;
            }
            bool bisDir=fi.isDir();
           if(bisDir)
            {
                ++file_num;
                //sprintf(cur_info, "'%s':\t\t%d lines\r\n",fi.path().toAscii().data(),line_num);
                get_all_file_linenum(fi.filePath().toAscii().data());
            }
            else
            {
                ++file_num;
                line_num=get_file_line_num(fi.filePath().toAscii().data());
                memset(cur_info,0,MAX_LENGTH_ONE_LINE);
                sprintf(cur_info,"'%s':\t\t%d lines",fi.path().toAscii().data(),line_num);
                detail_info += cur_info;
                black_num=get_file_black_num(fi.filePath().toAscii().data());
                memset(cur_info,0,MAX_LENGTH_ONE_LINE);
                sprintf(cur_info,",%d blacklines",black_num);
                detail_info += cur_info;
                note_num=get_file_black_num(fi.filePath().toAscii().data());
                memset(cur_info,0,MAX_LENGTH_ONE_LINE);
                sprintf(cur_info,",%d notelines\n",note_num);
                detail_info += cur_info;
                total_num +=line_num;
            }

         }
      }
     return true;
   }
离线foxgod

只看该作者 6楼 发表于: 2011-07-27
回 5楼(foxgod) 的帖子
上面这个程序为什么只能运行一个目录里面的一个文件夹呀,其他的都不可以运行,谁能告诉我怎么回事!!!
离线foxgod

只看该作者 7楼 发表于: 2011-07-27
回 3楼(abcdlcq) 的帖子
我在4楼写的这个程序为什么只能运行一个目录里面的一个文件夹呀,其他的都不可以运行,谁能告诉我怎么回事!!!
快速回复
限100 字节
 
上一个 下一个