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. Reading .txt file info into variables
Qt 6.11 is out! See what's new in the release blog

Reading .txt file info into variables

Scheduled Pinned Locked Moved General and Desktop
15 Posts 6 Posters 20.8k Views 1 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.
  • S Offline
    S Offline
    sheehan1234
    wrote on last edited by
    #1

    How do I read in a text file and assign the integers in that file to my own variables?

    1 Reply Last reply
    0
    • G Offline
      G Offline
      giesbert
      wrote on last edited by
      #2

      That depends, as always :-)
      I have no oidea, how the structure of the file is.
      Let's gess, one line contains one integer.
      Then you could just read the whole file into a QStringList, iterate of the entries and call toINt on each of them.

      Nokia Certified Qt Specialist.
      Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

      1 Reply Last reply
      0
      • S Offline
        S Offline
        sheehan1234
        wrote on last edited by
        #3

        Thank you very much Gerolf. I found this code snippet which supposedly puts my text file into a QStringList

        @QStringList stringList;
        QFile textFile("test.txt");
        QTextStream textStream(&textFile);
        while (true)
        {
        QString line = textStream.readLine();
        if (line.isNull())
        break;
        else
        stringList.append(line);
        }@

        If that is done correctly, how do I go about iterating through it?

        1 Reply Last reply
        0
        • S Offline
          S Offline
          sheehan1234
          wrote on last edited by
          #4

          I have QStringList of integers that I read in from a file. How do I iterate through this list to: a) save each value b) cast each to an integer.

          1 Reply Last reply
          0
          • M Offline
            M Offline
            mlong
            wrote on last edited by
            #5

            I'm not sure what you mean by "save each value" but iterating through a QStringList is fairly simple. There are a number of ways to do so.

            @
            QStringList list;

            // iterate through each element of list (which will be accessible via the QString "str")
            foreach (QString str, list)
            {
            ...
            int value = str.toInt(); // get integer representation of str
            ...
            }
            @

            BTW, This stuff is very well-documented.

            Software Engineer
            My views and opinions do not necessarily reflect those of anyone -- living or dead, real or fictional -- in this universe or any other similar multiverse node. Void where prohibited. Your mileage may vary. Caveat emptor.

            1 Reply Last reply
            0
            • S Offline
              S Offline
              sheehan1234
              wrote on last edited by
              #6

              I meant to say store each into a variable, which you answered. However I'm trying to do so in the following code, and when I try to print the value, nothing is displayed. Am I reading my text file into the QStringList incorrectly?

              @int main()
              {
              QStringList stringList;
              QFile textFile("test.txt");
              QTextStream textStream(&textFile);
              while (true)
              {
              QString line = textStream.readLine();
              if (line.isNull())
              break;
              else
              stringList.append(line);
              }

              foreach(QString str, stringList)
              {
                  int value = str.toInt();
                  cout << value;
              }
              return 0;
              

              }
              @

              1 Reply Last reply
              0
              • M Offline
                M Offline
                mlong
                wrote on last edited by
                #7

                You need to call "textFile.open()":http://doc.qt.nokia.com/4.7-snapshot/qfile.html#open

                Be sure and check its return value. There's an example in the QFile docs.

                Software Engineer
                My views and opinions do not necessarily reflect those of anyone -- living or dead, real or fictional -- in this universe or any other similar multiverse node. Void where prohibited. Your mileage may vary. Caveat emptor.

                1 Reply Last reply
                0
                • M Offline
                  M Offline
                  mlong
                  wrote on last edited by
                  #8

                  A cleaner implementation would probably be:

                  @
                  QStringList stringList;
                  QFile textFile("test.txt");
                  if (textFile.open(QIODevice::ReadOnly)
                  {
                  QTextStream textStream(&textFile);
                  while (!textStream.atEnd())
                  {
                  stringList.append(textStream.readLine());
                  }
                  }
                  @

                  Caveat: Brain to keyboard. Untested code. Not responsible for silly errors. YMMV

                  Software Engineer
                  My views and opinions do not necessarily reflect those of anyone -- living or dead, real or fictional -- in this universe or any other similar multiverse node. Void where prohibited. Your mileage may vary. Caveat emptor.

                  1 Reply Last reply
                  0
                  • S Offline
                    S Offline
                    sheehan1234
                    wrote on last edited by
                    #9

                    that worked! thank you very much!

                    1 Reply Last reply
                    0
                    • G Offline
                      G Offline
                      goetz
                      wrote on last edited by
                      #10

                      [quote author="sheehan1234" date="1317152090"]
                      If that is done correctly, how do I go about iterating through it?[/quote]

                      @
                      foreach(const QString line, stringList) {
                      // do something with the line
                      }
                      @

                      http://www.catb.org/~esr/faqs/smart-questions.html

                      1 Reply Last reply
                      0
                      • A Offline
                        A Offline
                        andre
                        wrote on last edited by
                        #11

                        This discussion looks a lot like "this":http://developer.qt.nokia.com/forums/viewthread/10146/ one...

                        1 Reply Last reply
                        0
                        • G Offline
                          G Offline
                          goetz
                          wrote on last edited by
                          #12

                          [quote author="Andre" date="1317189187"]This discussion looks a lot like "this":http://developer.qt.nokia.com/forums/viewthread/10146/ one...[/quote]

                          I merged both threads.

                          http://www.catb.org/~esr/faqs/smart-questions.html

                          1 Reply Last reply
                          0
                          • S Offline
                            S Offline
                            sheehan1234
                            wrote on last edited by
                            #13

                            I have the code exactly as you all have showed me but there was no output. so i put some print statements inside of the loops to see if the compiler was even entering the loops and it is not. What am I doing wrong?

                            @int main()
                            {
                            QStringList stringList;
                            QFile textFile("test.txt");
                            if (textFile.open(QIODevice::ReadOnly))
                            {
                            QTextStream textStream(&textFile);
                            while (!textStream.atEnd())
                            {
                            stringList.append(textStream.readLine());
                            cout << "test1";
                            }
                            }
                            foreach(const QString line, stringList)
                            {
                            cout << "test2";
                            cout << line.toStdString();
                            }
                            return 0;
                            }@

                            1 Reply Last reply
                            0
                            • V Offline
                              V Offline
                              vsorokin
                              wrote on last edited by
                              #14

                              Are you sure that your test.txt are in same directory that your executable file?

                              --
                              Vasiliy

                              1 Reply Last reply
                              0
                              • M Offline
                                M Offline
                                mlong
                                wrote on last edited by
                                #15

                                You should print an error message if it cannot open the file.
                                @
                                if (...open...)
                                {
                                ...
                                }
                                else
                                {
                                // tell me about it
                                }
                                @

                                Software Engineer
                                My views and opinions do not necessarily reflect those of anyone -- living or dead, real or fictional -- in this universe or any other similar multiverse node. Void where prohibited. Your mileage may vary. Caveat emptor.

                                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