У меня есть папка с файлами csv. Каждый файл csv назван по дате (например, 01JAN2013.csv, 02JAN2013.csv). Я должен прочитать файлы в порядке их даты (дата начала и дата окончания известны).Как перебирать диапазон дат в C++
Так что я пытаюсь пропустить даты, начиная с даты начала и до конца, чтобы генерировать имена файлов.
В настоящее время я делаю:
vector<string> dd{"01", "02", "03", "04", "05", "06", "07", "08", "09","10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20","21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31"};
vector<string> mmm{"JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG","SEP", "OCT", "NOV", "DEC"};
vector<string> yyyy{"2011","2012","2013","2014"};
string filePath=DataFolderPath;
for(int i=0;i<yyyy.size();i++)
{
for(int j=0;j<mmm.size();j++)
{
for(int k=0;k<dd.size();k++)
{
filePath.append(dd[k]);
filePath.append(mmm[j]);
filePath.append(yyyy[i]);
filePath.append(".csv");
}
}
}
Определенно некрасиво, но он получает работу.
Есть ли более простой способ прокрутки дат в C++. Что-то вдоль линий:
for (currentDate = starDate; currentDate < endDate; currentDate++) {
//Do stuff
}
UPDATE:
Это подход, который я, наконец, используется, сочетание обоих ответов ниже:
typdef struct tm Time;
Time startDate=makeDate(3,1,2011);
Time endDate=makeDate(24,1,2014);
time_t end=mktime(&endDate);
for(Time date=startDate;end>=mktime(&date);++date.tm_mday)
{
char buffer[16];
strftime(buffer, sizeof(buffer), "%d%b%Y.csv", &date);
std::string filename(buffer);
//To convert month to CAPS
std::transform(filename.begin()+2, filename.begin()+5,filename.begin()+2, ::toupper);
std::cout << filename << "\n";
}
Я также использовал makeDate
вспомогательная функция, основанная на ответе адди, который возвращает struct tm
вместо time_t
:
Time makeDate(int day, int month, int year)
{
Time ttm = {0};
ttm.tm_mday= day;
ttm.tm_mon= month-1;
ttm.tm_year= year-1900;
return ttm;
}
Похоже, что было бы легче найти файлы, которые есть, то просто сортировать их по дате, не так ли? –
@JerryCoffin Каждый файл содержит только данные за определенную дату. Он не был создан/изменен в эту дату. SO сортировка файлов по дате не будет полезна. –
Нет, я имею в виду сортировку по дате в названии. –