首页 > 其他 > 详细

一个统计多文件单行字符串出现次数QT实现

时间:2020-09-03 00:08:19      阅读:55      评论:0      收藏:0      [点我收藏+]

只保证能用,细节内存没考虑,清空功能也没调好

技术分享图片

count.pro

#-------------------------------------------------
#
# Project created by QtCreator 2020-05-08T01:22:21
#
#-------------------------------------------------

QT       += core gui

TARGET = sitool
TEMPLATE = app


SOURCES += main.cpp        sitool.cpp

HEADERS  += sitool.h

FORMS    += sitool.ui

mainwindow.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="windowModality">
   <enum>Qt::WindowModal</enum>
  </property>
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>631</width>
    <height>565</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <property name="sizePolicy">
    <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
     <horstretch>0</horstretch>
     <verstretch>0</verstretch>
    </sizepolicy>
   </property>
   <layout class="QHBoxLayout" name="horizontalLayout_3">
    <item>
     <layout class="QVBoxLayout" name="verticalLayout">
      <property name="sizeConstraint">
       <enum>QLayout::SetMinAndMaxSize</enum>
      </property>
      <item>
       <layout class="QHBoxLayout" name="horizontalLayout">
        <item>
         <widget class="QLabel" name="dirpath">
          <property name="text">
           <string>查找文件夹:</string>
          </property>
         </widget>
        </item>
        <item>
         <widget class="QLineEdit" name="dirname">
          <property name="text">
           <string/>
          </property>
         </widget>
        </item>
        <item>
         <widget class="QPushButton" name="dirbtn">
          <property name="text">
           <string>打开</string>
          </property>
         </widget>
        </item>
        <item>
         <widget class="QPushButton" name="clearbtn">
          <property name="text">
           <string>清空</string>
          </property>
         </widget>
        </item>
       </layout>
      </item>
      <item>
       <layout class="QHBoxLayout" name="horizontalLayout_2">
        <item>
         <widget class="QListWidget" name="filelist"/>
        </item>
        <item>
         <widget class="QTableView" name="restable"/>
        </item>
       </layout>
      </item>
     </layout>
    </item>
   </layout>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QStringList>
#include <QStandardItemModel>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
private slots:
    void getDirSlots();
    void clearbtnSlots();
private:
    Ui::MainWindow *ui;

    QStandardItemModel* mmodel;
    QStringList mImgNames;
    uint32_t mCnt;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QDir>
#include <QDebug>
#include <map>
#include <QString>
#include <QListWidget>
#include <QListWidgetItem>
#include <QStandardItemModel>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    setWindowState(Qt::WindowMaximized); //ok
    connect(ui->dirbtn, SIGNAL(clicked()), this, SLOT(getDirSlots()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::getDirSlots()
{
    mCnt = 0;

    QStringList mImgNames;
    QString mFolderPath;
    if(!ui->dirname->text().isNull())
    {
        mFolderPath  = QFileDialog::getExistingDirectory(this, "Open Folder", ui->dirname->text());
    }
    else
    {
        mFolderPath = QFileDialog::getExistingDirectory(this, "Open Folder");
    }
    if (mFolderPath.isEmpty())
    {
        return;
    }
    ui->dirname->setText(mFolderPath);

    QDir dir(mFolderPath);
    mFolderPath = dir.fromNativeSeparators(mFolderPath);//  "\\"转为"/"
    if (!dir.exists())
    {
        mImgNames = QStringList("");
    }

    dir.setFilter(QDir::Files);
    dir.setSorting(QDir::Name);
    dir.setNameFilters(QString("*.EBK").split(";"));
    mImgNames = dir.entryList();
    for (int i = 0; i < mImgNames.size(); ++i)
    {
        QListWidgetItem*item=new QListWidgetItem(ui->filelist);
        item->setText(mImgNames[i]);

        QString temp;
        mImgNames[i] = temp.append(mFolderPath).append("/").append(mImgNames[i]);

        ui->filelist->addItem(item);

        qDebug() << "entryList: " << i << "-" << mImgNames[i];
    }

    typedef std::map<QString, int> MapList;
    MapList map;
    qDebug() <<  mImgNames.size();
    for(int k = 0; k < mImgNames.size(); k++)
    {
        QStringList stocks;
        QFile file(mImgNames[k]);
        if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        {
            return;
        }
        QTextStream in(&file);
        QString line = in.readLine();
        while(!line.isNull())
        {
            line.remove(QRegExp("\\s"));
            qDebug() << line;
            if(map.end() == map.find(line))
            {
                map[line]= 1;
            }
            else
            {
                map[line] = map[line]++;
            }
            line = in.readLine();
        }
    }

    /* 创建表格视图 */
    QTableView *tableView =  ui->restable;
    tableView->verticalHeader()->hide();
    /* 设置表格视图大小 */
    //tableView->resize(850, 400);

    /* 创建数据模型 */
    mmodel = new QStandardItemModel();
    QStandardItemModel* model = mmodel;

    /* 设置表格标题行(输入数据为QStringList类型) */
    model->setHorizontalHeaderLabels({"次数", "代码"});

    /* 自适应所有列,让它布满空间 */
    tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    int index = 0;
    for(MapList::iterator itr = map.begin(); itr != map.end(); itr++)
    {
        if(itr->second > 1)
        {
            /* 加载第一列(ID)数据 */
            model->setItem(index, 0, new QStandardItem(QString::number(itr->second, 10)));
            /* 加载第二列(User Name)数据 */
            model->setItem(index, 1, new QStandardItem(QString(itr->first.data() + 1)));
            index++;
        }
    }
    /* 设置表格视图数据 */
    tableView->setModel(model);
}

void MainWindow::clearbtnSlots()
{
    mmodel->removeRows(0, mmodel->rowCount());
}

main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

一个统计多文件单行字符串出现次数QT实现

原文:https://www.cnblogs.com/kuikuitage/p/13605009.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!