На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> как преобразовать из double в time_t ?
    в файл содержатся два ряда данных  » дата»(в формате месяц, год)  «курс валюты» .
    считываю данные сначала двумерный массив типа double, затем значения из первого столбца массива заношу в  вектор

    ExpandedWrap disabled
      Date. vector<time_t>Date;
      <div>  for (int i = 0; i < count_row; i++)
      {
      Date.push_back((time_t)massiv[i][0]);</div>
      <div>   }</div>
      а сохраняются в ней только цифры, которые были введены до запятой. То есть от 01.2017  сохраняется 01


    я в теме time полный нуль :wall:

    может подскажет кто-нибудь что делать ?
      Цитата Nelly0892 @
      в файл содержатся два ряда данных  » дата»(в формате месяц, год)  «курс валюты» .
      считываю данные сначала двумерный массив типа double
      ...
      может подскажет кто-нибудь что делать ?

      www.ya.ru -> time_t c++
      Одна из ссылок:
      mktime
        Цитата Nelly0892 @
        сначала двумерный массив типа double

        А зачем тут double?

        Добавлено
        Цитата Nelly0892 @
        может подскажет кто-нибудь что делать ?

        Дата в каком виде? ДД.ММ.ГГГГ?
          01.2017 то есть ММ.ГГГГ

          Добавлено
          я пробую это число передать в структуру дд.мм.гггг. объявляю int day=01, month, year. и пробую извлечь в виде целых чисел месяц и год
            какое число? 01.2017 что это зачисло :D
              ExpandedWrap disabled
                struct my_date
                {
                    int month;
                    int year;
                } d;
                stringstream ss("01.2017");
                ss >> d.month;
                ss.get();
                ss >> d.year;
                std::cout << d.month << ' ' << d.year;

              оно?
                месяц 01 год 2017.

                Добавлено
                ну это ведь только на выводе таким образом можно отделить месяц от года, а мне нужно для дальнейших расчетов, чтоб можно было вычитать по месяцам и годам и сортировать по годам или месяцам
                  Цитата Nelly0892 @
                  чтоб можно было вычитать по месяцам и годам и сортировать по годам или месяцам

                  А в чем проблема?
                    Цитата Nelly0892 @
                    ну это ведь только на выводе таким образом можно отделить месяц от года, а мне нужно для дальнейших расчетов

                    не только. Как хотите так и приеняйте. Вот вам сортировка двух таких дат:

                    ExpandedWrap disabled
                      int compareMyDate(my_date &date0, my_date &date1){
                         int y = date0.year-date1.year;
                         if(y!=0){
                            return y;
                         }
                         return date0.month-date1.month;
                      }
                      то есть вы так из double вытаскиваете отдельно 01 и отдельно 2017? вы сами то пробовали это делать? то есть элемент double из вектора DATA. кто-нибудь понимает вопрос?
                        понять вопрос может не каждый, точнее не только лишь все могут понять, мало кто может выделить из дабла 2017 :hang:
                          Цитата Nelly0892 @
                          кто-нибудь понимает вопрос?

                          Никто не понимает, и хранить дату в double абсурдная идея. Лучше опиши задачу целиком.
                            вобщем, есть два ряда данных
                            01.2017 -525
                            02.2017 -571
                            03.2017 -363
                            04.2017 -384
                            05.2017 -537
                            06.2017 -671

                            в vector<double>Vx передаю первый столбец

                            и мне нужно преобразовать его к типу time_t

                            сейчас делаю так по первой подсказке в этой теме.

                            только вот на выводе где последняя строка, получаю "-1"


                            ExpandedWrap disabled
                              struct tm *timeinfo = new tm;
                               
                                      int day;
                                      int month;
                                      int year;
                               
                                      vector<time_t>Data;
                                      time_t DD;
                                      double D;
                               
                                      double g;
                               
                                      //int year;
                                      //double mm, day;
                                      //int month;
                                      day = 1;
                               
                               
                                      for (int i = 0; i < count_row; i++) {
                               
                                          D = Vx[i];
                               
                                          year = (int)(modf(D, &g) * 10000);
                                          month = (int)g;
                               
                                          timeinfo->tm_year = year;
                                          timeinfo->tm_mon = month;
                                          timeinfo->tm_mday = day;
                               
                                          DD = mktime(timeinfo);
                               
                               
                                          cout << "Date  " << DD << "\n";
                               
                                      }
                              Цитата Nelly0892 @
                              сейчас делаю так по первой подсказке в этой теме.

                              плохая подсказка, используй мою.

                              Добавлено
                              Цитата Nelly0892 @
                              в vector<double>Vx передаю первый столбец

                              В vector<double>Vx не может передаваться первый столбец. Точне дату в нем можно закодировать, но я сомневаюсь что это так. Покажи код, где заполняется Vx.

                              Добавлено
                              Цитата Nelly0892 @
                              year = (int)(modf(D, &g) * 10000);

                              Это что за магическая формула?

                              Добавлено
                              Другими словами, что если кто-то умудрился закодировать в double 2 числа, то мы не сможем подсказать как их получить обратно без знаия алгоритма (или формулы) кодирования. С другой стороны где-то было написано
                              Цитата
                              в вектор Vx и Vy считываю из файла

                              Лучше при чтении не использовать double, а использовать структуру наподобие моей.

                              Добавлено
                              Если есть код чтения из файла, то лучше показать его здесь.
                                да что не понятно-то? кто-то решил, что хранить дату в дабле вида: целая часть - то месяц, а дробная - год, хорошая идея :D
                                  void readData() {
                                  double **massiv;

                                  massiv = new double*[count_row];

                                  for (int i = 0; i < count_row; i++)
                                  {
                                  massiv[i] = new double[count_col];
                                  }

                                  //считываем матрицу из файла
                                  for (int i = 0; i < count_row; i++)
                                  {
                                  for (int j = 0; j < count_col; j++)
                                  {
                                  massiv[i][j] = v.at(i*count_col + j);
                                  }
                                  }

                                  for (int i = 0; i < count_row; i++)
                                  {
                                  Vi.push_back(massiv[i][0]);

                                  Vj.push_back(massiv[i][1]);


                                  }

                                  this->count_row = count_row;
                                  this->count_col = count_col;
                                  this->v = v;
                                  this->Vx = Vi;
                                  this->Vy = Vj;






                                  }

                                  Добавлено
                                  поверьте, Vx у меня заполняется полностью

                                  Добавлено
                                  а из вашей подсказки я отдельно месяц и год никак не получу в формате time_t

                                  Добавлено
                                  кароче, сама справлюсь. всем спасибо
                                    Ааа. Я теперь понял как у Nelly0892 используется double: считывается месяц в целой части, а год в дробной.
                                    Сразу говор: так делать нельзя. Выделить обратно год и месяц, в принципе, можно, но не нужно.
                                    ExpandedWrap disabled
                                      #include <limits>
                                      ...
                                      int month, year;
                                      month = static_cast<int>(Vx[i]);
                                      year = static_cast<int>( (Vx[i] - month + std::numeric_limits<double>::epsilon()) * 10000.0 );
                                      std::cout << month << ' ' << year;

                                    Но делать так все равно нельзя.

                                    Добавлено
                                    Цитата Nelly0892 @
                                    //считываем матрицу из файла

                                    Тут нет обращения к файлу. v - это вообще что такое?
                                    Сообщение отредактировано: shm -
                                      ну я просто весь код не скинула
                                        а ты скинь! желательно с 12го этажа :crazy:
                                          в векторе v хранятся все данные из файла

                                          Добавлено
                                          ну окей, только вопрос то был ни в том как структуру сделать

                                          Добавлено
                                          тяжко у вас тут на форуме, очень тяжко
                                            в жизни еще тяжелее будет :whistle: тебе, деточка, пытаются показать, как надо делать, прозрачно намекая, что хранить время в дабле, а считывать из файла векторы - не есть гуд
                                              это для программиста не есть гуд, а аналитики именно так в файл и сохраняют. так что работа чисто под заказчика

                                              Добавлено
                                              да блин, разобрались с double. но че-то никто не заметил что я там mktime(timeinfo); использую

                                              вот тут вся соль
                                                угу, один аналитик вектор со временем сохраняет, второй вектор даблов читает :lool:
                                                  Цитата shm @
                                                  а из вашей подсказки я отдельно месяц и год никак не получу в формате time_t

                                                  Ну если есть непреодолимое желание забивать гвозди микроскопом:
                                                  ExpandedWrap disabled
                                                    #include <limits>
                                                    #include <cstring>
                                                    #include <ctime>
                                                    ...
                                                    int month, year;
                                                    month = static_cast<int>(Vx[i]);
                                                    year =  static_cast<int>((Vx[i] - month + std::numeric_limits<double>::epsilon()) * 10000.0);
                                                        
                                                    tm tmm;
                                                    memset(&tmm, 0, sizeof(tmm));
                                                    tmm.tm_year = year - 1900;
                                                    tmm.tm_mon = month - 1;
                                                    tmm.tm_mday = 1;
                                                    time_t time = mktime(&tmm);
                                                     
                                                    //в переменной time время формата time_t
                                                    std::cout << ctime(&time);

                                                  Хотя я бы настоятельно рекомендовал прислушаться к моим советам выше.
                                                  Сообщение отредактировано: shm -
                                                    ну а если ты, аналитик, по гост ескд говоришь, так там работают в текстовом формате, ибо еще и табуляция формализована. ну то есть читают/пишут строки и парсят/компонуют их. но вы, конечно, вольны и левой пяткой в правом ухе :-?
                                                      Цитата Nelly0892 @
                                                      а аналитики именно так в файл и сохраняют

                                                      Попробуй сохрани так 2010 год. :whistle:

                                                      Добавлено
                                                      У тебя сохранится .201, хотя мой последний алгоритм будет работать и с этим. Хотя в целом это бред.

                                                      Добавлено
                                                      Цитата Nelly0892 @
                                                      тяжко у вас тут на форуме, очень тяжко

                                                      А что тяжкого-то? Во-первых пришлось применить экстрасенсорные способности, чтобы понять способ кодирования двух чисел в double т.к. этого описано не было. Во-вторых данный способ помимо того, что бредовый в принципе, да еще и сложнее в реализации, чем использовать ту же структуру. И зачем это все надо? Почему бы не прислушаться к людям, которые занимаются этим много лет?
                                                        Вот блин, ответил в другой теме, а тут уже всё разобрали...

                                                        Добавлено
                                                        Скрытый текст
                                                        Цитата _lcf_ @
                                                        угу, один аналитик вектор со временем сохраняет, второй вектор даблов читает :lool:

                                                        Надо просто убрать аналитиков от компутеров подальше :)
                                                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                        0 пользователей:


                                                        Рейтинг@Mail.ru
                                                        [ Script execution time: 0,0718 ]   [ 17 queries used ]   [ Generated: 26.04.24, 12:50 GMT ]