Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Polish
  4. (specyficzny?) odczyt danych z pliku txt
Qt 6.11 is out! See what's new in the release blog

(specyficzny?) odczyt danych z pliku txt

Scheduled Pinned Locked Moved Solved Polish
6 Posts 4 Posters 4.2k Views 3 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.
  • V Offline
    V Offline
    VoidWalker
    wrote on last edited by
    #1

    Witam
    Napisałem program który tworzy pliki tekstowe w których dane są zapisywane w następujący sposób:
    info1;info2;info3;...

    Potrzebuję jednak, by program był również w stanie przy odczycie danych rozdzielić poszczególne informacje.
    Miałem pomysł żeby odczytywać dane znak po znaku, a przy wykryciu separatora po prostu przeskoczyć do kolejnego ciągu string. Jednak jedno że byłoby to rozwiązanie wg mnie nieefektywne, to na dodatek nie mam pojęcia jak oprogramować przesuwanie wskaźnika odczytu po odczytaniu znaku.
    Wszelkie sugestie są mile widziane :)

    1 Reply Last reply
    0
    • T Offline
      T Offline
      turaz
      wrote on last edited by
      #2

      Hej,

      Jeżeli odczytasz dane w postaci QByteArray. to możesz użyć metod QByteArray::split() Dokumentacja. Dane możesz "posplitować" po znaku: ";" W wyniku otrzymasz listę z każdym "info".

      1 Reply Last reply
      1
      • sierdzioS Offline
        sierdzioS Offline
        sierdzio
        Moderators
        wrote on last edited by
        #3

        To są pliki CSV, są do tego biblioteki :-) Ale można też ręcznie, bardzo prosto:

        QFile file("something.csv");
        
        if (file.open(QFile::Text | QFile::ReadOnly) {
          const QString data(file.readAll());
          const QStringList pieces(data.split(";")); // Dzielimy dane na kawałki
        
          for (auto piece : pieces) {
            // do something with each data piece
          }
        }
        

        Tylko uwaga - jeśli wiesz, ze plik może być duży, lepiej nie używać readAll() - całość zostanie zaczytana do RAMu, moze to trwać no i obciążyć pamięć/ procesor niepotrzebnie. W takim wypadku lepiej postawić na streaming operators (QTextStream, zobacz użycie w dokumentacji QFile i QTextStream), wtedy plik jest czytany kawałek po kawałku.

        (Z(:^

        1 Reply Last reply
        1
        • V Offline
          V Offline
          VoidWalker
          wrote on last edited by
          #4

          Stokrotne dzięki!!!!
          Właśnie tego szukałem
          Piszę program na zaliczenie semestru więc na chwilę obecną musi mi wystarczyć zapis do notatnika. Bazy danych będę miał dopiero w przyszłym semestrze, więc upgrade programu trochę zaczeka.
          Jeszcze raz wielkie dzięki!

          1 Reply Last reply
          0
          • Chris KawaC Online
            Chris KawaC Online
            Chris Kawa
            Lifetime Qt Champion
            wrote on last edited by
            #5

            Używanie split() powoduje tworzenie wielu kopii danych i niepotrzebnie spowalnia aplikację. Zamiast split() do parsowania stringów lepiej używać splitRef(), które nie kopiuje danych tylko tworzy wektor QStringRef (odpowiednik standardowego string_view).

            1 Reply Last reply
            1
            • sierdzioS Offline
              sierdzioS Offline
              sierdzio
              Moderators
              wrote on last edited by
              #6

              Dobre info, Chris, dzięki!

              W Qt 5.10 będzie już QStringView.

              (Z(:^

              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