Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.137.218.215] |
|
Сообщ.
#1
,
|
|
|
в файл содержатся два ряда данных » дата»(в формате месяц, год) «курс валюты» .
считываю данные сначала двумерный массив типа double, затем значения из первого столбца массива заношу в вектор 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 полный нуль может подскажет кто-нибудь что делать ? |
Сообщ.
#2
,
|
|
|
Цитата Nelly0892 @ в файл содержатся два ряда данных » дата»(в формате месяц, год) «курс валюты» . считываю данные сначала двумерный массив типа double ... может подскажет кто-нибудь что делать ? www.ya.ru -> time_t c++ Одна из ссылок: mktime |
Сообщ.
#3
,
|
|
|
Цитата Nelly0892 @ сначала двумерный массив типа double А зачем тут double? Добавлено Цитата Nelly0892 @ может подскажет кто-нибудь что делать ? Дата в каком виде? ДД.ММ.ГГГГ? |
Сообщ.
#4
,
|
|
|
01.2017 то есть ММ.ГГГГ
Добавлено я пробую это число передать в структуру дд.мм.гггг. объявляю int day=01, month, year. и пробую извлечь в виде целых чисел месяц и год |
Сообщ.
#5
,
|
|
|
какое число? 01.2017 что это зачисло
|
Сообщ.
#6
,
|
|
|
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; оно? |
Сообщ.
#7
,
|
|
|
месяц 01 год 2017.
Добавлено ну это ведь только на выводе таким образом можно отделить месяц от года, а мне нужно для дальнейших расчетов, чтоб можно было вычитать по месяцам и годам и сортировать по годам или месяцам |
Сообщ.
#8
,
|
|
|
Цитата Nelly0892 @ чтоб можно было вычитать по месяцам и годам и сортировать по годам или месяцам А в чем проблема? |
Сообщ.
#9
,
|
|
|
Цитата Nelly0892 @ ну это ведь только на выводе таким образом можно отделить месяц от года, а мне нужно для дальнейших расчетов не только. Как хотите так и приеняйте. Вот вам сортировка двух таких дат: int compareMyDate(my_date &date0, my_date &date1){ int y = date0.year-date1.year; if(y!=0){ return y; } return date0.month-date1.month; } |
Сообщ.
#10
,
|
|
|
то есть вы так из double вытаскиваете отдельно 01 и отдельно 2017? вы сами то пробовали это делать? то есть элемент double из вектора DATA. кто-нибудь понимает вопрос?
|
Сообщ.
#11
,
|
|
|
понять вопрос может не каждый, точнее не только лишь все могут понять, мало кто может выделить из дабла 2017
|
Сообщ.
#12
,
|
|
|
Цитата Nelly0892 @ кто-нибудь понимает вопрос? Никто не понимает, и хранить дату в double абсурдная идея. Лучше опиши задачу целиком. |
Сообщ.
#13
,
|
|
|
вобщем, есть два ряда данных
01.2017 -525 02.2017 -571 03.2017 -363 04.2017 -384 05.2017 -537 06.2017 -671 в vector<double>Vx передаю первый столбец и мне нужно преобразовать его к типу time_t сейчас делаю так по первой подсказке в этой теме. только вот на выводе где последняя строка, получаю "-1" 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"; } |
Сообщ.
#14
,
|
|
|
Цитата Nelly0892 @ сейчас делаю так по первой подсказке в этой теме. плохая подсказка, используй мою. Добавлено Цитата Nelly0892 @ в vector<double>Vx передаю первый столбец В vector<double>Vx не может передаваться первый столбец. Точне дату в нем можно закодировать, но я сомневаюсь что это так. Покажи код, где заполняется Vx. Добавлено Цитата Nelly0892 @ year = (int)(modf(D, &g) * 10000); Это что за магическая формула? Добавлено Другими словами, что если кто-то умудрился закодировать в double 2 числа, то мы не сможем подсказать как их получить обратно без знаия алгоритма (или формулы) кодирования. С другой стороны где-то было написано Цитата в вектор Vx и Vy считываю из файла Лучше при чтении не использовать double, а использовать структуру наподобие моей. Добавлено Если есть код чтения из файла, то лучше показать его здесь. |
Сообщ.
#15
,
|
|
|
да что не понятно-то? кто-то решил, что хранить дату в дабле вида: целая часть - то месяц, а дробная - год, хорошая идея
|
Сообщ.
#16
,
|
|
|
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 Добавлено кароче, сама справлюсь. всем спасибо |
Сообщ.
#17
,
|
|
|
Ааа. Я теперь понял как у Nelly0892 используется double: считывается месяц в целой части, а год в дробной.
Сразу говор: так делать нельзя. Выделить обратно год и месяц, в принципе, можно, но не нужно. #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 - это вообще что такое? |
Сообщ.
#18
,
|
|
|
ну я просто весь код не скинула
|
Сообщ.
#19
,
|
|
|
а ты скинь! желательно с 12го этажа
|
Сообщ.
#20
,
|
|
|
в векторе v хранятся все данные из файла
Добавлено ну окей, только вопрос то был ни в том как структуру сделать Добавлено тяжко у вас тут на форуме, очень тяжко |
Сообщ.
#21
,
|
|
|
в жизни еще тяжелее будет тебе, деточка, пытаются показать, как надо делать, прозрачно намекая, что хранить время в дабле, а считывать из файла векторы - не есть гуд
|
Сообщ.
#22
,
|
|
|
это для программиста не есть гуд, а аналитики именно так в файл и сохраняют. так что работа чисто под заказчика
Добавлено да блин, разобрались с double. но че-то никто не заметил что я там mktime(timeinfo); использую вот тут вся соль |
Сообщ.
#23
,
|
|
|
угу, один аналитик вектор со временем сохраняет, второй вектор даблов читает
|
Сообщ.
#24
,
|
|
|
Цитата shm @ а из вашей подсказки я отдельно месяц и год никак не получу в формате time_t Ну если есть непреодолимое желание забивать гвозди микроскопом: #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); Хотя я бы настоятельно рекомендовал прислушаться к моим советам выше. |
Сообщ.
#25
,
|
|
|
ну а если ты, аналитик, по гост ескд говоришь, так там работают в текстовом формате, ибо еще и табуляция формализована. ну то есть читают/пишут строки и парсят/компонуют их. но вы, конечно, вольны и левой пяткой в правом ухе
|
Сообщ.
#26
,
|
|
|
Цитата Nelly0892 @ а аналитики именно так в файл и сохраняют Попробуй сохрани так 2010 год. Добавлено У тебя сохранится .201, хотя мой последний алгоритм будет работать и с этим. Хотя в целом это бред. Добавлено Цитата Nelly0892 @ тяжко у вас тут на форуме, очень тяжко А что тяжкого-то? Во-первых пришлось применить экстрасенсорные способности, чтобы понять способ кодирования двух чисел в double т.к. этого описано не было. Во-вторых данный способ помимо того, что бредовый в принципе, да еще и сложнее в реализации, чем использовать ту же структуру. И зачем это все надо? Почему бы не прислушаться к людям, которые занимаются этим много лет? |
Сообщ.
#27
,
|
|
|
Вот блин, ответил в другой теме, а тут уже всё разобрали...
Добавлено Скрытый текст Цитата _lcf_ @ угу, один аналитик вектор со временем сохраняет, второй вектор даблов читает Надо просто убрать аналитиков от компутеров подальше |