C'est le constructeur de "SequenceVisionnage_film" qui est utilisé dans le dernier code du dépôt Github et plus le constructeur de "InfosVisionnage", donc les constantes ont des valeurs différentes que lors de mes précédentes remarques.
Ces constantes sont là pour savoir ce que devrait contenir chaque capture de l'expression régulière (capture = (x.x.x)).
Dans la boucle while :
La valeur de la variable "dates_format" est :
((([[:digit:]]{4})-([[:digit:]]{2})-([[:digit:]]{2})|([[:digit:]]{2})-([[:digit:]]{2})|([[:digit:]]{2}))(_?))
Si la variable "dates_str" est égale à "2018-05-01 VOD Orange" :
dates_match[0/dates_full_match_index] : c'est l'ensemble de tout ce qui est capturable => 2018-05-01 VOD Orange
dates_match[1/xxxxxxxxxxxxxxxxxxxx] : c'est ce qui est capturé par () => 2018-05-01 VOD Orange
dates_match[2/xxxxxxxxxxxxxxxxxxxx] : c'est ce qui est capturé par () => 2018-05-01 VOD Orange
dates_match[3/dates_date_year_month_day_year_index] : c'est ce qui est capturé par () => 2018
dates_match[4/dates_date_year_month_day_month_index] : c'est ce qui est capturé par () => 05
dates_match[5/dates_date_year_month_day_day_index] : c'est ce qui est capturé par () => 01
dates_match[6/dates_date_month_day_month_index] : c'est ce qui est capturé par () => (rien)
dates_match[7/dates_date_month_day_day_index] : c'est ce qui est capturé par () => (rien)
dates_match[8/dates_date_day_day_index] : c'est ce qui est capturé par () => (rien)
dates_match[9/xxxxxxxxxxxxxxxxxxxxxxx] : c'est ce qui est capturé par () => (rien)
dates_match[10/dates_someFlag_index] : aucune capture "()" ne correspond à la valeur 10 => (rien)
Vous devriez faire le ménage dans les constantes dans la fonction "SequenceVisionnage_film::SequenceVisionnage_film", il y en a partout (oui, c'est un peu de ma faute avec mes exemples qui décortiquent un peu le procédé).
Beaucoup ne correspondent à rien (cf. dates_someFlag_index) ou sont même fausses (cf. filename_stream_index ci-après).
Quand vous modifiez les expressions régulières, il faut systématiquement corriger ces constantes.
Il y a moyen de faire en sorte d'utiliser des "noms" à la place des numéros d'ordre, mais il faut que vous compreniez le concept de capture avant ça, et c'est pas encore dans le C++ "standard", je crois.
https://regex101.com/r/ZWx27Q/1 pour un exemple d'utilisation.
Mais les indices utilisés dans la boucle "while" semblent correctes, mais si vous utilisez d'autres constantes, vous aurez des "surprises".
Maintenant avec l'expression régulière "filename_format_rg" :
(((([[:digit:]]{4})-([[:digit:]]{2})-([[:digit:]]{2})|([[:digit:]]{2})-([[:digit:]]{2})|([[:digit:]]{2}))(_?))+)(\s(.+))?
Si la variable "str" est égale à "2018-05-01 VOD Orange" :
match[11/filename_stream_index] : c'est ce qui est capturé par () => "_VOD Orange"
match[12/xxxxxxxxxxxxxxxxxxxx] : c'est ce qui est capturé par () => "VOD Orange"
Votre constante "filename_stream_index" est égale à 11 donc le code :
Code:
1 2 3 4
| if (match[filename_stream_index].matched)
{
m_streaming = match[filename_stream_index];
} |
fait que la variable "m_streaming" contient "_VOD Orange" et non "VOD Orange".
Donc, si votre constante "filename_stream_index" aurait été égale à 12, le résultat aurait été "correcte".
Je vous laisse vérifier que les autres constantes "filename_stream_xxx" sont "bonnes".
Quand vous modifiez les expressions régulières, il faut systématiquement corriger ces constantes.(bis)