Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2017, 21:23   #1
troyan90
Пользователь
 
Регистрация: 23.06.2011
Сообщений: 54
По умолчанию Разбор строки. Регулярные выражения.

Добрый день!

Нужно сделать проверку имени файла, чтобы в имени файла была дата такого формата 27072017.
Сделал функцию для переименовании файла и пока работает так:
Код:
string correct_file(string filename, int index)
{
    string result = { };
    bool start = false;
    for (unsigned i = 0; i < filename.size(); i++)
    {
        if (filename[i] == '_')
            start = !start;

        if (start)
            result += filename[i];
    }
    if (result.size())
        return "f130" + result + "_" + to_string(index) + ".dbf";
    else
        return "0";
}

cout << correct_file("файл_27072017_1.dbf", 403171) << endl;

// output:
// f130_27072017_403171.dbf
Проблема в том что если в имени файла абракадабра, то он просто не переименуется.
По сути нужно сделать проверку: если в имени файла присутствует дата формата 27072017 то вытащить эту дату в строку. В regex вообще не шарю. Подскажите как реализовать.
troyan90 вне форума Ответить с цитированием
Старый 01.08.2017, 23:49   #2
troyan90
Пользователь
 
Регистрация: 23.06.2011
Сообщений: 54
По умолчанию

Разобрался
Код:
    cmatch result;
    regex regular("([\\d]{8})");

    if (regex_search("file_27072017_1.dbf", result, regular))
        cout << result[0] << endl;

// output:
// 27072017
troyan90 вне форума Ответить с цитированием
Старый 02.08.2017, 12:38   #3
troyan90
Пользователь
 
Регистрация: 23.06.2011
Сообщений: 54
По умолчанию

Сам себе и ответил
Код:
        cmatch result;
	regex regular("([\\d]{2})"
				  "(01|02|03|04|05|06|07|08|09|10|11|12)"
				  "(2017|2018|2019|2020|2021|2022|2023|2024|2025)");

	if (regex_search("f13027072017_1.dbf", result, regular));
		cout << result[0] << endl;

// output:
// 27072017
Ниче умнее не придумал, зато работает

Последний раз редактировалось troyan90; 02.08.2017 в 12:52.
troyan90 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Lazarus] Надо написать программу на, которая удаляет из строки начальные пробелы, используя регулярные выражения SvetaSveta Помощь студентам 1 25.04.2017 13:43
Регулярные выражения :: 2 переноса строки :: Javascript BART96 JavaScript, Ajax 4 27.12.2015 00:25
Вытащить из строки нужные данные. Спасибо / PHP: Регулярные выражения protected_by PHP 3 20.06.2014 09:55
Регулярные выражения - поиск пустой строки furstenberg Общие вопросы Delphi 15 27.08.2012 18:10
Регулярные выражения kilogram PHP 4 10.06.2012 00:44