Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
20 / 9 / 3
Регистрация: 02.04.2015
Сообщений: 646
1

Как сделать массовое переменование даты

01.05.2017, 21:33. Показов 567. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую!
помогите программой под винду, у меня такая проблема
есть куча текстовых файлов

в них такие данные


January 12, 1990 2.545
January 16, 1990 2.5525
January 17, 2001 2.5525
January 18, 1990 2.57
February 01, 1990 2.56
February 02, 1990 2.5575
February 05, 1990 2.54
February 21, 2013 2.534
February 22, 1990 2.54
February 23, 1990 2.545
February 26, 1990 2.553
February 27, 1990 2.5525
February 28, 1990 2.557
March 01, 1990 2.582
March 02, 1990 2.585
March 05, 1990 2.58
March 06, 1990 2.578
March 07, 1990 2.5865
March 08, 1990 2.59
March 09, 1990 2.6
March 12, 1990 2.605
April 13, 1990 2.6445
April 16, 1990 2.661
April 17, 1990 2.6555
April 18, 1990 2.647
April 19, 1990 2.6525
April 20, 1990 2.6667
April 23, 1990 2.657
April 24, 1990 2.652
April 25, 1990 2.658
April 26, 1990 2.654
April 27, 1990 2.66
April 30, 1990 2.6595
May 01, 1990 2.655
May 02, 1990 2.659
May 03, 1990 2.658
May 04, 1990 2.655
May 07, 2000 2.642
May 08, 1990 2.642
May 09, 1990 2.635
May 10, 1990 2.634
May 11, 1990 2.6216
May 14, 1990 2.6425
May 15, 1990 2.6385
May 16, 1990 2.639
May 17, 1990 2.635
June 14, 1990 2.659
June 15, 1990 2.667
June 18, 1990 2.6265
June 19, 1990 2.657
June 20, 1990 2.666



нужно чтобы программа обработала только дату
вот такое в текстовике изначально

January 12, 1990 2.545

после обработки нужно такой вид

1990-01-12 2.545



может кто может помочь?

месяца в текстовиках одинаково прописаны, вот так!

January
February
March
April
May
June
July
August
September
October
November
December


после месяца идет день через пробел, а после месяца через запятую и пробел идет год
может кто знает как мне сделать замену?

спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2017, 21:33
Ответы с готовыми решениями:

Как сделать так, чтобы даты формата 12/2/1232 не воспринимались как даты а оставались как текст?
Доброго всем времени суток, подскажите, как сделать так что-бы даты формата 12/2/1232 не...

Как можно на определенной куче компов сделать массовое обновление джавы?
Всем привет, хотелось бы получить совет как можно на определенной куче компов сделать массовое...

Как сделать выборку периода даты в запросе с вычислением от запрошенной даты
Доброго времени суток! Есть форма, есть подчинённая форма, при запуске формы запрашивается...

Как сделать запрос с выводом клиентов от даты взятия кредита до даты последней сплаты
Задание "вывод людей которые имели кредит в прошлом". Я так понял нужно создать запрос (не знаю...

18
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
01.05.2017, 22:54 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <fstream>
#include <string>
#include <ctime>
#include <cstdio>
 
int main()
{
    char const* file_1 = "in.txt";
    char const* file_2 = "out.txt";
    std::fstream ifs(file_1, std::ios::in), ofs(file_2, std::ios::out);
    if (ifs.is_open() && ofs.is_open())
    {
        std::string mon, day, year, num;
        time_t rawtime;
        tm * timeinfo = nullptr;
        time(&rawtime);
        timeinfo = localtime(&rawtime);
        char buf[64];
 
        while (ifs >> mon >> day >> year >> num)
        {
            day.erase(day.size() - 1, 1);
            for (int i = 0; i < 12; ++i)
            {
                timeinfo->tm_mon = i;
                strftime(buf, sizeof(buf), "%B", timeinfo);
                if (!strcmp(buf, mon.c_str()))
                {
                    break;
                }
            }
            ofs << year << '-';
            if (timeinfo->tm_mon + 1 < 10)
            {
                ofs << 0;
            }
            ofs<< timeinfo->tm_mon + 1 << '-' << day << ' ' << num << '\n';
        }
 
        ifs.clear();
        ifs.close();
        ofs.close();
 
        // раскомментировать если нужна замена старого файла на новый
        //remove(file_1);
        //rename(file_2, file_1);
    }
    else
    {
        std::cerr << "Unable to open file\n";
    }
 
    return 0;
}
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
01.05.2017, 23:14 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <utility>
#include <iostream>
#include <map>
#include <string>
#include <fstream>
using namespace std;
 
struct Date
{
    string month;
    string nMonth;
    unsigned int date;
    unsigned int year;
    double number;
};
 
int main()
{
    pair <string, string> arrPair[12] = { make_pair("January", "01"), make_pair("February", "02"), 
                                          make_pair("March", "03"), make_pair("April", "04"),
                                          make_pair("May", "05"), make_pair("June", "06"),     
                                          make_pair("July", "07"), make_pair("August", "08"),
                                          make_pair("September", "09"), make_pair("October", "10"),
                                          make_pair("November", "11"), make_pair("December", "12")};
 
    map <string, string>  m;
    for (int i = 0; i < 12; ++i)
        m.insert(arrPair[i]);
    
    ifstream fin("input.txt");
    if (!fin)
    {
        cout << "Error opening file!" << endl;
        system("pause");
        return 0;
    }
    
    ofstream fout("output.txt");
    Date obj;
    while (fin >> obj.month)
    {
        (fin >> obj.date).get();
        fin >> obj.year >> obj.number;
        obj.nMonth = m[obj.month];
        
        fout << obj.year << '-' << obj.nMonth << '-' << obj.date
            << ' ' << obj.number << endl;
    }
    fin.close();
    fout.close();
}
1
20 / 9 / 3
Регистрация: 02.04.2015
Сообщений: 646
01.05.2017, 23:37  [ТС] 4
Спасибо nd2
откомпилируйте в ехе пожалуйста!
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
02.05.2017, 00:10 5
Цитата Сообщение от serauto79 Посмотреть сообщение
откомпилируйте в ехе пожалуйста!
Вам завернуть в Release или в Debug?
0
20 / 9 / 3
Регистрация: 02.04.2015
Сообщений: 646
02.05.2017, 00:23  [ТС] 6
мне готовый файл exe

Добавлено через 1 минуту
я установил только что визуал студио 2017 но не пойму как из исходного кода скомпилировать в ехе прогу
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
02.05.2017, 00:28 7
Цитата Сообщение от serauto79 Посмотреть сообщение
мне готовый файл exe
Это я понял. Ладно, тогда Release.
Вложения
Тип файла: rar Build.rar (79.5 Кб, 3 просмотров)
0
nd2
02.05.2017, 00:29
  #8

Не по теме:

Форум глючит.

0
20 / 9 / 3
Регистрация: 02.04.2015
Сообщений: 646
02.05.2017, 09:27  [ТС] 9
спасибо, только нужно антивирус отключать, а то не работает

Добавлено через 8 минут
если можно черкните еще под такие условия

23/4/1999 4.003183

на выходе нужно дата вида

1999-4-23 4.003183

год, месяц, число

Добавлено через 8 часов 15 минут
спасибо думаю обойдусь одной
0
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
02.05.2017, 11:59 10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
#include <regex>
#include <fstream>
#include <unordered_map>
using namespace std;
int main() {
    unordered_map<string,string>m {{"January","01"},{"February","02"},{"March","03"},{"April","04"},{"May","05"},{"June","06"},{"July","07"},{"August","08"},{"September","09"},{"October","10"},{"November","11"},{"December","12"}};
    ifstream ff("tr.txt");
    ofstream fd("out.txt");
    string s {},txt {};
    while(getline(ff,s)) {
        txt+=s+" ";
    }
    regex e("(\\w+)\\s*(0?\\d{1,2})\\,\\s(\\d{4})\\s*(\\d\\.\\d+)");
    for(auto it=sregex_iterator(txt.begin(),txt.end(),e); it!=sregex_iterator(); it++) {
        fd<<it->str(3)+"-"+m[it->str(1)]+"-"+it->str(2)+" "+it->str(4)<<endl;;
    }
}
0
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
02.05.2017, 12:00 11
Вывод
Миниатюры
Как сделать массовое переменование даты  
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
02.05.2017, 13:08 12
Извращенцы
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <ctime>
#include <iomanip>
#include <fstream>
 
int main()
{
    std::fstream ifs("input.txt", std::ios::in), ofs("output.txt", std::ios::out);
    std::tm dt;
    double data;
    while (ifs >> std::get_time(&dt, "%B %d, %Y") >> data)
        ofs << std::put_time(&dt, "%F") << " " << data << std::endl;
}
2
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
02.05.2017, 16:29 13
В 10-й студии крашит, mingw 4.9.2 (-std=c++14) не понимает std::get_time, std::put_time.
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
02.05.2017, 16:37 14
Цитата Сообщение от nd2 Посмотреть сообщение
не понимает std::get_time, std::put_time
Печалька.
12 студия тоже валится. В 15 всё норм.
Вообще, эти функции в С++11 ещё завезли.

Добавлено через 1 минуту
Как я понял, проблему у студии вызывает флаг форматирования "%F".
Ну можно ручками тогда %Y-%B-%d. В 2012 отработало.
1
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
02.05.2017, 16:37 15
Цитата Сообщение от MrGluck Посмотреть сообщение
Вообще, эти функции в С++11 ещё завезли.
Знаю, это и не понятно (с mingw).
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
02.05.2017, 16:41 16
Цитата Сообщение от nd2 Посмотреть сообщение
Знаю, это и не понятно (с mingw).
Я и не удивлён. У него реализация фич выборочная. Тот же std::to_string.
Или std::random_device - слава Богу в последних версиях заглушку поставили - хоть перестало экспешн выдавать, теперь просто одинаковый результат.
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
02.05.2017, 16:42 17
Цитата Сообщение от MrGluck Посмотреть сообщение
В 2012 отработало.
В 10-й тоже, но выходной файл не того формата, что должен: месяц номером должен быть, а не названием.
Цитата Сообщение от serauto79 Посмотреть сообщение
January 12, 1990 2.545
после обработки нужно такой вид
1990-01-12 2.545
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
02.05.2017, 16:44 18
Цитата Сообщение от nd2 Посмотреть сообщение
В 10-й тоже, но выходной файл не того формата, что должен: месяц номером должен быть, а не названием.
Да, правильно всё же %Y-%m-%d. Это я не оттуда скопировал.
Если что - флаги можно брать отсюда.
1
20 / 9 / 3
Регистрация: 02.04.2015
Сообщений: 646
02.05.2017, 19:02  [ТС] 19
nd2 спасибо что помогли!
0
02.05.2017, 19:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.05.2017, 19:02
Помогаю со студенческими работами здесь

Как в базе данных, в запросе сделать так, чтобы пользователь вводил даты, и если такой даты нету, то выводило окно "тако
Как в базе данных, в запросе сделать так, чтобы пользователь вводил даты, и если такой даты нету,...

Как сделать, чтобы в заголовках отображались даты, а в полях результаты? Можно ли так сделать?
Как сделать чтобы в заголовках отображались даты а в полях результаты можно ли так сделать?

переменование таблицы в paradox
Всем доброго времени суток. Нужна помощь с sql-запросом. Пытаюсь с помощью запроса переименовать...

Как сделать ползунок даты?
https://cridit.ru/kreditnye-karty-onlajn на этом сайте есть второй ползунок, в котором в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru