Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Line Count in my Qt Project.
Qt 6.11 is out! See what's new in the release blog

Line Count in my Qt Project.

Scheduled Pinned Locked Moved Solved General and Desktop
25 Posts 10 Posters 24.7k Views 4 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J.HilkJ Offline
    J.HilkJ Offline
    J.Hilk
    Moderators
    wrote on last edited by
    #13

    I had some time during breakfast :-)

    #include <QCoreApplication>
    #include <QDir>
    #include <QFile>
    #include <QTextStream>
    #include <QVector>
    
    int countLines(QString path){
        QFile f(path);
        int cnt = 0;
    
        if(f.open(QIODevice::ReadOnly | QIODevice::Text)){
            QTextStream read(&f);
            while(!read.atEnd()){
                read.readLine();
                cnt++;
            }
        }
        f.close();
        return cnt;
    }
    
    int parseDir(QString path){
        int cnt = 0;
        QDir dir(path);
        QStringList dirs = dir.entryList(QDir::AllDirs |QDir::NoDotAndDotDot);
        QStringList file = dir.entryList(QDir::Files);
        for(QString dir : dirs){
                cnt += parseDir(path + "/"+dir);
        }
    
        for(QString s : file){
            if(s.splitRef('.').last() == "h" || s.splitRef('.').last() == "cpp")
                cnt += countLines(path + "/"+s);
        }
    
        return cnt;
    }
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        int count = 0;
    
        count += PathDir(a.arguments().last());
    
        QTextStream out(stdout);
        out << "Lines in project: " << a.arguments().last() << ": "<< endl <<count << endl;
    
        return a.exec();
    }
    

    Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


    Q: What's that?
    A: It's blue light.
    Q: What does it do?
    A: It turns blue.

    jsulmJ 1 Reply Last reply
    6
    • J.HilkJ J.Hilk

      I had some time during breakfast :-)

      #include <QCoreApplication>
      #include <QDir>
      #include <QFile>
      #include <QTextStream>
      #include <QVector>
      
      int countLines(QString path){
          QFile f(path);
          int cnt = 0;
      
          if(f.open(QIODevice::ReadOnly | QIODevice::Text)){
              QTextStream read(&f);
              while(!read.atEnd()){
                  read.readLine();
                  cnt++;
              }
          }
          f.close();
          return cnt;
      }
      
      int parseDir(QString path){
          int cnt = 0;
          QDir dir(path);
          QStringList dirs = dir.entryList(QDir::AllDirs |QDir::NoDotAndDotDot);
          QStringList file = dir.entryList(QDir::Files);
          for(QString dir : dirs){
                  cnt += parseDir(path + "/"+dir);
          }
      
          for(QString s : file){
              if(s.splitRef('.').last() == "h" || s.splitRef('.').last() == "cpp")
                  cnt += countLines(path + "/"+s);
          }
      
          return cnt;
      }
      
      int main(int argc, char *argv[])
      {
          QCoreApplication a(argc, argv);
      
          int count = 0;
      
          count += PathDir(a.arguments().last());
      
          QTextStream out(stdout);
          out << "Lines in project: " << a.arguments().last() << ": "<< endl <<count << endl;
      
          return a.exec();
      }
      
      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #14

      @J.Hilk Well, it is a bit more complex :-) For example your version counts empty lines and comment lines.

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      J.HilkJ 1 Reply Last reply
      2
      • jsulmJ jsulm

        @J.Hilk Well, it is a bit more complex :-) For example your version counts empty lines and comment lines.

        J.HilkJ Offline
        J.HilkJ Offline
        J.Hilk
        Moderators
        wrote on last edited by
        #15

        @jsulm well obviously :-P
        but that could be addressed e.g:

        int countLines(QString path){
            QFile f(path);
            int cnt = 0;
        
            if(f.open(QIODevice::ReadOnly | QIODevice::Text)){
                QTextStream read(&f);
                QString line;
                bool comment = false;
                while(!read.atEnd()){
                    line = read.readLine();
                    line = line.simplified();
                    line.replace(" ","");
                    if(line.size() >0){
                        if(line.leftRef(2) != "//"){
                            if(line.contains("/*"))
                                comment = true;
                            if(line.contains("*/"))
                                comment = false;
                            if(!comment)
                                cnt++;
                        }
                    }
                }
            }
            f.close();
            return cnt;
        }
        

        Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


        Q: What's that?
        A: It's blue light.
        Q: What does it do?
        A: It turns blue.

        1 Reply Last reply
        2
        • Pradeep P NP Offline
          Pradeep P NP Offline
          Pradeep P N
          wrote on last edited by
          #16

          Thanks All for the help.
          Moving to solved.

          Pradeep Nimbalkar.
          Upvote the answer(s) that helped you to solve the issue...
          Keep code clean.

          1 Reply Last reply
          2
          • Kent-DorfmanK Offline
            Kent-DorfmanK Offline
            Kent-Dorfman
            wrote on last edited by
            #17

            find and grep...find and grep

            The dystopian literature that served as a warning in my youth has become an instruction manual in my elder years.

            aha_1980A 1 Reply Last reply
            0
            • Kent-DorfmanK Kent-Dorfman

              find and grep...find and grep

              aha_1980A Offline
              aha_1980A Offline
              aha_1980
              Lifetime Qt Champion
              wrote on last edited by
              #18

              @Kent-Dorfman would you like to elaborate a bit more?

              Qt has to stay free or it will die.

              1 Reply Last reply
              2
              • W Offline
                W Offline
                wrosecrans
                wrote on last edited by
                #19
                find . -iname \*.h -o -iname \*.cpp -exec grep \\\; {} \; | wc -l
                

                Would find all the .h and .cpp find in the current directory, and count the number of lines with a semicolon. For the most things, that's probably a pretty useful count of code LOC, and requires no extra tools to be installed.

                Pradeep P NP 1 Reply Last reply
                1
                • fcarneyF Offline
                  fcarneyF Offline
                  fcarney
                  wrote on last edited by
                  #20

                  Is this for some kind of line-counting match?

                  C++ is a perfectly valid school of magic.

                  1 Reply Last reply
                  0
                  • W wrosecrans
                    find . -iname \*.h -o -iname \*.cpp -exec grep \\\; {} \; | wc -l
                    

                    Would find all the .h and .cpp find in the current directory, and count the number of lines with a semicolon. For the most things, that's probably a pretty useful count of code LOC, and requires no extra tools to be installed.

                    Pradeep P NP Offline
                    Pradeep P NP Offline
                    Pradeep P N
                    wrote on last edited by
                    #21

                    @wrosecrans
                    This don't do the folder search recursive right. ?

                    Pradeep Nimbalkar.
                    Upvote the answer(s) that helped you to solve the issue...
                    Keep code clean.

                    aha_1980A 1 Reply Last reply
                    1
                    • Pradeep P NP Pradeep P N

                      @wrosecrans
                      This don't do the folder search recursive right. ?

                      aha_1980A Offline
                      aha_1980A Offline
                      aha_1980
                      Lifetime Qt Champion
                      wrote on last edited by
                      #22

                      @Pradeep-P-N

                      I have not tested this code, but find is recursive so it should work.

                      Regards

                      Qt has to stay free or it will die.

                      1 Reply Last reply
                      1
                      • Kent-DorfmanK Offline
                        Kent-DorfmanK Offline
                        Kent-Dorfman
                        wrote on last edited by Kent-Dorfman
                        #23

                        yes, the default behaviour of find "in unix" is recursive. grep is a pattern matcher. I use

                        find . -type f -iname \*.h -o -iname \*.hpp -o \
                        -iname \*.c -o -iname \*.cc -o -iname \*.cxx \
                        -o -iname \*.cpp | \
                        xargs -n 1 egrep -v "^[ \t]*$" | wc -l
                        

                        prints total of all target file lines (found recursively). ignores blank lines

                        The dystopian literature that served as a warning in my youth has become an instruction manual in my elder years.

                        Pradeep P NP 1 Reply Last reply
                        0
                        • Kent-DorfmanK Kent-Dorfman

                          yes, the default behaviour of find "in unix" is recursive. grep is a pattern matcher. I use

                          find . -type f -iname \*.h -o -iname \*.hpp -o \
                          -iname \*.c -o -iname \*.cc -o -iname \*.cxx \
                          -o -iname \*.cpp | \
                          xargs -n 1 egrep -v "^[ \t]*$" | wc -l
                          

                          prints total of all target file lines (found recursively). ignores blank lines

                          Pradeep P NP Offline
                          Pradeep P NP Offline
                          Pradeep P N
                          wrote on last edited by
                          #24

                          Hi @Kent-Dorfman
                          Cool, Linux commands are always awesome.
                          I just Added *.qml to the command so i can include qml also for the line count.

                          find . -type f -iname \*.h -o -iname \*.hpp -o -iname \*.qml -o \
                          -iname \*.c -o -iname \*.cc -o -iname \*.cxx \
                          -o -iname \*.cpp | \
                          xargs -n 1 egrep -v "^[ \t]*$" | wc -l
                          

                          Thanks a lot again
                          @mrjj @Eddy @jsulm @J-Hilk @Kent-Dorfman @aha_1980 @wrosecrans .

                          Have a great day.

                          Pradeep Nimbalkar.
                          Upvote the answer(s) that helped you to solve the issue...
                          Keep code clean.

                          1 Reply Last reply
                          5
                          • D Offline
                            D Offline
                            Dr. Abel
                            wrote on last edited by
                            #25

                            This tool will help you.
                            cloc-1.74.

                            It is collected in PyMake project.
                            github https://github.com/AbelTian/PyMake.git (fetch)
                            github https://github.com/AbelTian/PyMake.git (push)
                            origin https://gitee.com/drabel/PyMake (fetch)
                            origin https://gitee.com/drabel/PyMake (push)

                            In demo/ dir.

                            1 Reply Last reply
                            0

                            • Login

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • Users
                            • Groups
                            • Search
                            • Get Qt Extensions
                            • Unsolved