Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Italian
  4. Scelta del contenitore
Qt 6.12 LTS is out! See what's new in the release blog

Scelta del contenitore

Scheduled Pinned Locked Moved Solved Italian
5 Posts 2 Posters 1.3k Views
  • 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.
  • PollyP Offline
    PollyP Offline
    Polly
    wrote on last edited by
    #1

    Buon giorno avrei bisogno di sapere quale contenitore sarebbe utile per un'analisi che devo fare: ho un file csv diviso in due colonne. La prima mi indica con 1 quando è stato attivato il motore e 0 quando è stato spento. Per ciascuno dei due eventi sono stati registrati la data e l'ora in cui è avvenuta quell'evento. Io devo poter calcolare il tempo complessivo in cui il motore ha funzionato, sommando le differenze di tempo tra l'evento 0 e l'evento 1 che appunto rappresenta questo tempo. Potete darmi un suggerimento

    1 Reply Last reply
    0
    • VRoninV Offline
      VRoninV Offline
      VRonin
      wrote on last edited by VRonin
      #2
      struct StatoMotore{
      bool acceso;
      QDateTime dataOra;
      StatoMotore()
      :acceso(false)
      {}
      StatoMotore(bool acc, const QDateTime& d_o)
      :acceso(acc)
      ,dataOra(d_o)
      {}
      StatoMotore(const StatoMotore& other) = default;
      StatoMotore& operator=(const StatoMotore& other) = default;
      };
      
      QVector<StatoMotore> listaStati;
      QFile fileDati("dati.csv");
      fileDati.open(QFile::ReadOnly);
      QTextStream lettore(&fileDati);
      QString linea;
      while (stream.readLineInto(&line)) {
      const QVector<QStringRef> parti = linea.splitRef(QLatin1Char(','),Qt::SkipEmptyParts);
      listaStati.append(StatoMotore(parti.at(0).toInt()==1, QDateTime::fromString(parti.at(1).toString(),QStringLiteral("dd/MM/yyyy hh:mm:ss"))));
      }
      std::sort(listaStati.begin(),listaStati.end(),[](const StatoMotore& a,const StatoMotore& b)->bool{return a.dataOra<b.dataOra;});
      qint64 secAcceso=0;
      auto i=listaStati.cbegin();
      bool era_acceso=i->acceso;
      const auto iEnd=listaStati.cend();
      for(auto iPrev=i++;i!=iEnd;++i, ++iPrev){
      if(!i->acceso && era_acceso)
      secAcceso += iPrev->dataOra.msecsTo(i->dataOra)/static_cast<qint64>(1000);
      era_acceso=i->acceso;
      }
      qDebug() << "Il motore e' stato acceso per " << secAcceso << " secondi";
      

      Potresti anche usare std::pair<bool,QDateTime> invece di StatoMotore ma di solito preferisco l'approccio "custom struct"

      "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
      ~Napoleon Bonaparte

      On a crusade to banish setIndexWidget() from the holy land of Qt

      1 Reply Last reply
      0
      • PollyP Offline
        PollyP Offline
        Polly
        wrote on last edited by
        #3

        Perfetto provo e poi ti do conferma per il forum

        1 Reply Last reply
        0
        • PollyP Offline
          PollyP Offline
          Polly
          wrote on last edited by Polly
          #4

          Ciao allora ho provato a fare un oggetto anzichè una struct perchè magari potrei rielaborarlo per altri elementi. L'unica cosa che non riesco a capire è se ho sbagliato il costruttore, perchè i dati non vengono mi sembrano vengano memorizzati nel vettore. Soprattutto l'elemento QDateTime, perchè mi risulta vuoto.
          Per cui penso di aver sbagliato qualcosa.

          #include "analizeobj.h"
          
          Analizeobj::Analizeobj()
          {
               event="";
               registration= QDateTime::fromString("01/01/1900 00:00", "dd/MM/YYYY hh:mm");
          }
          
          Analizeobj::Analizeobj(QString mEvent, QDateTime mRegistration)
          {
              Analizeobj::setEvent(mEvent);
              Analizeobj::setRegistration(mRegistration);
          }
          
          QString Analizeobj::getEvent()
          {
              return event;
          }
          
          QDateTime Analizeobj::getRegistrazion()
          {
              return registration;
          }
          
          void Analizeobj::setEvent(QString mEvent)
          {
              if (mEvent != event)
              {
                  event = mEvent;
              }
              else return;
          }
          
          void Analizeobj::setRegistration(QDateTime mRegistration)
          {
              if (mRegistration != registration)
              {
                  registration = mRegistration;
              }
          }
          
          #include <QDateTime>
          
          
          class Analizeobj
          {
          public:
              Analizeobj();
              Analizeobj(QString mEvent, QDateTime mRegistration);
              QString getEvent();
              QDateTime getRegistrazion();
              void setEvent(QString);
              void setRegistration(QDateTime);
          private:
              QString event;
              QDateTime registration;
          };
          
          #endif // ANALIZEOBJ_H
          

          e questo è il comando che ho usato per inserire i dati nel nel vettore

           datogrezzo.append(Analizeobj(parti.at(0).toString(),QDateTime::fromString(parti.at(1).toString(),QStringLiteral("dd/MM/YYYY hh:mm"))));
          
          1 Reply Last reply
          0
          • PollyP Offline
            PollyP Offline
            Polly
            wrote on last edited by
            #5

            Visto l'errore
            Nel formato dell'anno ho usato "YYYY" anzichè "yyyy".
            Adesso funziona tutto , grazie davvero

            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
            • Unsolved